Tabelle hat unter anderem folgende Felder: ueberschrift (varchar), kurztext (text), langtext (text), von (date)... und einige mehr
Problem: Es soll in den o.g. Feldern gesucht werden ob 3 Suchworte vorhanden sind, wobei jedes der Suchworte mind. einmal vorkommen muss.
Die Suchworte können enthalten: Ziffern, Buchstaben und Bindstrich (für Datumsformat)
meine Lösungsansätze:
Variante 1
dise Abfrage funktioniert natürlich nicht weil er dann in jedem der 4 Felder mind. ein Suchwort braucht und wenn ich die ANDs mit OR ersetze dann entspricht das ja auch nicht dem Problem weil er dann jeden Datensatz findet, in dem mind. 1 und nicht alle 3 Suchworte vorhanden sind.
Variante 2 - Subqueries
Da ist leider das Problemchen dass ich von Subqueries keine Ahnung habe und die Infos im Netz dürftig sind. So habe ich in 2 Std keinerlei Infos gefunden wie oft ich IN verwenden kann, innerhalb einer Abfrage.
meine Idee ist ein solches Konstrukt:
Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN (SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format FROM texte ' at line 4
Irgendwie dreht sich jetzt zwar alles im Kopf aber es kommt nix raus. Über einen Wink mit einem grossen Zaunspfahl wäre ich sehr dankbar.
Danke schon im voraus und guten Hunger
Problem: Es soll in den o.g. Feldern gesucht werden ob 3 Suchworte vorhanden sind, wobei jedes der Suchworte mind. einmal vorkommen muss.
Die Suchworte können enthalten: Ziffern, Buchstaben und Bindstrich (für Datumsformat)
meine Lösungsansätze:
Variante 1
PHP-Code:
$sql = "SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format FROM texte WHERE
(ueberschrift LIKE '%".$suchworte[0]."%' OR ueberschrift LIKE '%".$suchworte[1]."%' OR ueberschrift LIKE '%".$suchworte[2]."%')
AND (kurztext LIKE '%".$suchworte[0]."%' OR kurztext LIKE '%".$suchworte[1]."%' OR kurztext LIKE '%".$suchworte[2]."%')
AND (text LIKE '%".$suchworte[0]."%' OR text LIKE '%".$suchworte[1]."%' OR text LIKE '%".$suchworte[2]."%')
AND (von LIKE '%".$suchworte[0]."%' OR von LIKE '%".$suchworte[1]."%' OR von LIKE '%".$suchworte[2]."%')
ORDER BY von DESC";
Variante 2 - Subqueries
Da ist leider das Problemchen dass ich von Subqueries keine Ahnung habe und die Infos im Netz dürftig sind. So habe ich in 2 Std keinerlei Infos gefunden wie oft ich IN verwenden kann, innerhalb einer Abfrage.
meine Idee ist ein solches Konstrukt:
PHP-Code:
$sql = "SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format
FROM texte
WHERE ueberschrift LIKE '%".$suchworte[0]."%' OR ueberschrift LIKE '%".$suchworte[1]."%' OR ueberschrift LIKE '%".$suchworte[2]."%'
IN
(SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format
FROM texte
WHERE kurztext LIKE '%".$suchworte[0]."%' OR kurztext LIKE '%".$suchworte[1]."%' OR kurztext LIKE '%".$suchworte[2]."%'
IN
(SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format
FROM texte
WHERE text LIKE '%".$suchworte[0]."%' OR text LIKE '%".$suchworte[1]."%' OR text LIKE '%".$suchworte[2]."%'
IN
(SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format
FROM texte
WHERE von LIKE '%".$suchworte[0]."%' OR von LIKE '%".$suchworte[1]."%' OR von LIKE '%".$suchworte[2]."%'
)))ORDER BY von DESC";
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN (SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format FROM texte ' at line 4
Irgendwie dreht sich jetzt zwar alles im Kopf aber es kommt nix raus. Über einen Wink mit einem grossen Zaunspfahl wäre ich sehr dankbar.
Danke schon im voraus und guten Hunger

Kommentar