Denkblockade. MySQL-Suchmaschine

Cruelty

Grünschnabel
Moin, moin,

ich baue grade an einem Suchsystem für die Seite meiner Freundin. Die ganze Seite basiert auf MySQL und das klappt soweit auch ganz gut.

:google: sagt garnix und mit der MySQL-Syntax von JOIN kann ich grad auch nix anfangen. Da es aber ne Überraschung werden soll, muss es schnell gehen. Vielleicht kann mir ja jemand von euch helfen.

$sql = "SELECT *
FROM
category
WHERE
titel LIKE '%".$_POST['keyword']."%'
OR
text LIKE '%".$_POST['keyword']."%'";

Das ist meine SELECT-Abfrage für die Suche. Hier wird nun allerdings nur in der Tabelle category gesucht, das erkennt ich auch so. ;)

In der Tabelle gibt es 2 Tabellen, einmal categorys und einmal articles. Das ist n bissel kompliziert geraten, jedoch ist mein Ziel BEIDE Tabellen zu durchsuchen.

$sql = "SELECT *
FROM
category,
articles
WHERE
titel LIKE '%".$_POST['keyword']."%'
OR
text LIKE '%".$_POST['keyword']."%'";

...ergibt folgenden Fehler:

Column 'titel' in where clause is ambiguous

Die Ausgabe läuft einfach durch $row['titel'] bzw. $row['text'].

Ich hoffe ich konnte das Problem gut beschreiben und ihr wisst was, was mir hilft.

P.S.
Bitte keine Sprüche wie :rtfm: oder so, ich hab die Forensuche bemüht und Google befragt... Sogar Yahoo, weil größerer Index als Google.... Nix hat mich weiter gebracht.
 
Zuletzt bearbeitet:
Die Fehlermeldung bedeutet, dass die angegebene Spalte „titel“ in der WHERE-Klausel mehrdeutig ist, da es wohl in beiden Tabellen eine Spalte dieses Namens gibt.
 
Ja, englisch kann ich. Und 'ne Idee, wie ich das hinbiegen soll?

Klingt böse, ist aber nicht so gemeint, danke für die Hilfe. ;-)
 
Da die angegebene „titel“-Spalte mehrdeutig ist, musst du die Spalte mit Tabellennamen angeben, damit sie eindeutig ist.
 
Danke, auch grad gefunden.... Wenn man in den hintersten Ecken von Google googled, bringt das doch manchmal was. ;)

Der Vollständigkeit halber: Hier klicken

Vielen Dank für die schnelle Hilfe und angenehmes Weiterposten. :)

--------------

Okay, doch noch nicht erledigt....

Ich hab also:

$sql = "SELECT *
FROM
category,
articles
WHERE
category.titel LIKE '%".$_POST['keyword']."%'
OR category.text LIKE '%".$_POST['keyword']."%'
OR articles.text LIKE '%".$_POST['keyword']."%'
OR articles.titel LIKE '%".$_POST['keyword']."%'";
eingegeben. Dies liefert mir meine GESAMTE MySQL-Datenbank zurück. Ich selbst seh' da aber keinen Fehler drin. :-/
 
Zuletzt bearbeitet:
Hallo Cruelty,

das Problem ist, das die Abfrage zwar Suchergebnisse bringt, aber du keinen JOIN durchführst. Ich gehe mal davon aus, dass du das auch gar nicht möchtest. Durch dein Statement bedingt kombiniert die Datenbank fleissig ALLE Suchergebnisse aus der 1.Tabelle mit ALLEN Suchergebnissen aus der 2.Tabelle.

Wenn du joinen wolltest, dann musst du darüber im Klaren sein, wie das ganz aussehen soll.
Ich geh mal davon aus, dass deine Artikel eine Verknüpfung zur Tabelle "category" haben.

Also wäre ein möglicher Join (zusätzliche Zeile in der WHERE-Clause) z.B.
SQL:
AND articles.categorie_id = category.id

Jetzt schränkst du damit natürlich auf Kategorien ein, die mindestens einen Artikel haben wie auch nur auf Artikel, die nicht ohne Kategorie dastehen.

Wenn du nun aber sowohl alle Kategorien als auch alle Artikel haben möchtest, die dem Titel bzw. dem Text entsprechend, unabhängig ob Artikel zur Kategorie oder eine Kategorie beim Artikel angegeben ist, dann hilft dir nur:

1. ein FULL OUTER JOIN z.B. (ungetestet)

SQL:
SELECT * 
  FROM articles 
  FULL OUTER JOIN category ON (articles.category_id = category.id)
 WHERE category.titel LIKE '%.....%' OR
       category.text LIKE '%.....%' OR ...
usw.

bzw.
2. ein UNION ALL

SQL:
SELECT titel, text
  FROM articles
 WHERE titel LIKE '%......%' OR
       text LIKE '%......%'
UNION ALL
SELECT titel, text
  FROM category
 WHERE titel LIKE '%......%' OR
       text LIKE '%......%'

Markus
 
Geilomat.

Herzlichen dank, Markus... Ich hab mich für die UNION-Variante entschieden.

Eine Frage habe ich noch... Kennt jemand einen Weg wie ich von $row['text'], also dem vollen Artikel nur 50 Zeichen VOR dem Suchwort und 50 Zeichen NACH dem Suchwort ausgeben kann? Am besten wär noch eine Suchwort-Hervorhebung... Aber das ist jetzt nicht so wichtig... Könnte ja nur sein, dass jemand beiläufig etwas weiss. ;)

An dieser Stelle nochmal herzlichen Dank, an die beiden Helfer und auch herzlichen Dank im Namen des Geburtstagskindes (meiner Freundin)
 

Neue Beiträge

Zurück