Arrayinhalt mit Datenbank abgleichen - funktioniert nicht

d3mueller

Mitglied
Hi, habe folgenden Code:

PHP:
<?php $artikel =  utf8_encode($row['artikel']); 
    $artikel_explode = explode(", ", $artikel);
    foreach ($artikel_explode as $tag) {
        
        $result2 = $db->query("SELECT id,titel FROM `artikel` WHERE `inhalt` LIKE '%$tag%'");
        $doppelTest = array();
        while(@$row2 = $result2->fetch_assoc()) {
            
            if(!in_array($row2['titel'], $doppelTest)) {
                array_push($doppelTest, $row2['titel']);
                echo $row2['titel'] . "<br>";
            }
            
        }
    }


?>

Folgende Situation:

Habe in einer Datenbanktabelle eine Spalte ($row['artikel']), in welcher sich Begriffe befinden, die mit einem ", " abgetrennt sind.
Jetzt möchte ich jeden dieser Begriffe mit einer anderen Datenbanktabelle (namens artikel) abgleichen. Da aber manchmal mehrere Begriffe in einem Artikel vorkommen, passiert es schnell, dass er dann doppelte Einträge generiert, also z.B. so:

Artikel 1
Artikel 2
Artikel 2
Artikel 2
Artikel 3

Das wollte ich verhindern, in dem ich ein leeres array erstelle, und immer erst prüfe, ob der Titel des Artikels bereits vorhanden ist im Array. Wenn nicht, dann soll er den titel mit echo ausgeben und den Titel in das Array einfügen.
Wenn der Titel aber schon im Array drin, soll nichts passieren, und der nächste Begriff soll überprüft werden.

Leider funktioniert das nicht. Weiß einer, wieso? :D

LG
 
Du kannst mit in_array() prüfen.

Oder du machst es einfacher über MySQL
MySQL kennt den netten Befehl FIND_IN_SET(). Der schut nur ob etwas im Set ist, egal ob es 10 mal drin ist oder nicht
PHP:
$sql = <<<SQL
SELECT 
	id,
	titel 
FROM 
	`artikel` 
WHERE 
	FIND_IN_SET(`inhalt`, '{$row['artikel']}');
SQL;
$result2 = $db->query($sql);

oder du kombinierst gleich beide Tabellen
SQL:
-- Mit dem DISTINCT doppelte Ausgabe unterbinden
SELECT DISTINCT
	a.id,
	a.titel 
FROM 
	myTable AS t,
	artikel AS a
WHERE
	FIND_IN_SET(a.inhalt, t.artikel)
	AND t.irgendEinFeld = 'Mein Suchbegriff';
 
Zuletzt bearbeitet von einem Moderator:
Du hast es hoffentlich für deine Bedürfnisse umgeschrieben - denn ich weiss ja nicht wie deine Tabelle heisst und was die Suchbegriffe sind.
 
Habs in PhpMyAdmin eingegeben als SQL-Befehl. Es kam zwar keine Fehlermeldung, aber er lieferte Null Ergebnisse. Habe aber ein Wort genommen, was ganz sicher in einem der Einträge vorhanden ist.
Das hat PhpMyAdmin ausgegeben:
MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze)
 
Das hier habe ich in PhpMyAdmin eingegeben:
SQL:
SELECT id,titel FROM `artikel` WHERE FIND_IN_SET(`inhalt`, 'News')

Das hier normal im Code (innerhalb der foreach-Schleife, die die einzelnen Begriffe durchlaufen lässt):
SQL:
SELECT id,titel FROM `artikel` WHERE FIND_IN_SET(`inhalt`, '{$tag}')
 
Zuletzt bearbeitet von einem Moderator:
Oh Mist - Sorry. Du willst ja mit %News% vergleichen. Das geht nicht mit FIND_IN_SET()

Na dann, doch dein Code und eine Prüfung mit in_array();
 

Neue Beiträge

Zurück