Zwei unterschiedliche MySQL-Tabellen durchsuchen.
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abschneiden
code
date
einlesen
feld
festlegen
jemand
katastrophe
klammern
ordern
posten
suchbegriff
tabelle
text
union
url
video
ziemlich schlechte idee
zweifel
-
Hallo,
Ich arbeite gerade an einer Suchfunktion, die meine Blog-Datenbanktabelle und meine Video-Datenbanktabelle nach einem Suchbegriff durchsucht.
Meine Abfrage sieht bis jetzt noch so aus, funktioniert allerdings noch nicht:
('SELECT * FROM video WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') AND (SELECT * FROM blog WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') ORDER BY date DESC
Kann mir jemand sagen was an dieser Abfrage noch falsch ist?
Gruß Fabi
Beitrag zuletzt geändert: 11.9.2011 13:31:56 von fabian-riedel -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Sieht dann so aus:
SELECT * FROM video, blog WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' OR video.category OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' OR blog.category LIKE '%$suchbegriff%' ORDER BY date DESC
Tut leider immer noch nicht
Gruß Fabi -
fabian-riedel schrieb:
Sieht dann so aus:
SELECT * FROM video, blog WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' OR video.category OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' OR blog.category LIKE '%$suchbegriff%' ORDER BY date DESC
Tut leider immer noch nicht
Gruß Fabi
Kannst du vielleicht einmal einen Screen von deiner Datenbank posten und hast du im originalcode die Klammern gesetzt? -
Hm, wäre schön, wenn du den Code ein wenig übersichtlicher hier posten könntest. Wenn du den so schreibst, dann ist es kein Wunder, dass sich irgendwelche Fehler beim tippen einschleichen.
Ich meine an einer Stelle hast du das LIKE '$suchbegriff%' vergessen... aber wie gesagt, wenn du es übersichtlicher aufschreibst, dann wäre ich mir da jetzt sicherer -
Hallo fabian-riedel,
was Du brauch ist eine Union-Abfrage.
Das setzt aber voraus, dass in beiden Tabellen gleich viele Felder mit gleichen Datentypen an gleicher Position sind. Falls dem nicht so ist, dann musst Du anstelle von 'SELECT *' die Feldnamen explizit angeben. Also z.B.(SELECT * FROM video WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') UNION (SELECT * FROM blog WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') ORDER BY date DESC;
SELECT tags, text, category FROM ...
-
Ist das Übersichtlicher?
SELECT tags, text, category FROM video, blog WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' OR video.category LIKE '%$suchbegriff%' OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' OR blog.category LIKE '%$suchbegriff%' ORDER BY date DESC
Sieht jetzt so aus, funktioniert allerdings immernoch nicht und sie Union-Abfrage geht nicht, da es sehr unterschiedliche Tabellen sind.
Noch jemand ne Lösungsidee?
Gruß Fabi -
Sollten die Spaltennamen wirklich identisch sein, dann lösche die Tabellenbezeichnung. Sollte das nicht so sein, dann musst du im SELECT-Teil erst Bezeichnungen für die Spateln festlegen.
-
Hallo fabian-riedel,
wenn Du nur die Felder tags, text und category benötigst und es sich dabei um Text/Varchar-Felder oder ähnliches handelt, dann sollte folgendes doch eigentlich funktionieren:
Damit Dein zuletzt geposteter Code was vernünftiges macht müsste er eigentlich folgendermaßen aussehen:( SELECT tags, text, category, date FROM video WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') UNION ( SELECT tags, text, category, date FROM blog WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') ORDER BY date DESC;
Wobei das wahrscheinlich nicht machen wird, was Du willst und einfach zwei Tabellen ohne weiter JOIN-Bedingungen in den FROM-Abschnitt zu schreiben ist unter umständen ein ziemlich schlechte Idee, da das auf manche Systemen zu einer laufzeittechnische Katastrophe führt.SELECT video.tags AS v_tags, video.text AS v_text, video.category AS v_category blog.tags AS b_tags, blog.text AS b_text, blog.category AS b_category FROM video, blog WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' OR video.category LIKE '%$suchbegriff%' OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' OR blog.category LIKE '%$suchbegriff%' ORDER BY video.date, blog.date DESC;
Im Zweifel bleibt Dir dann nur die beiden Abfragen getrennt auszuführen und sie dann explizit zu mergen, d.h. z.B. mit PHP.
Beitrag zuletzt geändert: 12.9.2011 20:20:11 von darkpandemic -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage