Texter mit x: bei mysql-Abfrage (Zwischen-)Ergebnis als weitere Bedingung nutz

Hallo,

ich habe jetzt schon einige Stunden gesucht, wie, falls überhaupt, man innerhalb einer mysql-Abfrage einen Teil des Ergebnisses als Bedingung für weitere Ergebnisse nutzen kann. Ich habe einiges gelesen aber bis auf JOIN ist nichts übrig geblieben, was bei genauerer Betrachtung wenigstens vielleicht geeignet ist. Ich verstehe aber noch nicht wie JOIN genau funktioniert und weiß nicht, wie es vielleicht noch eingesetzt werden kann.

Es geht um die Erweiterung der erste Abfrage (auf die Tabelle wordlist) bei einer Suche über den "typischen" wordlist - wordmatch - posting - Weg.

zur Tabelle wordlist:
In Spalte "id" stehen IDs (int, autoincrement), in spalte "wort" stehen Wörter (einzelne) und in Spalte "gf_id" steht der Wert 0, wenn es sich um ein Wort in Grundform handelt, oder die ID aus spalte "id" der dazugehörigen Grundform, wenn es sich nicht um eine Grundform handelt.

Bisher habe ich die Abfrage mit

"... WHERE wort IN ('$woerter')"; // $woerter ist entsprechend aufbereitet

durchgeführt.

Nun würde ich gern in Fall A, bei jedem Treffer bei dem "gf_id" den Wert 0 hat, auch alle Ergebnisse aus den Zeilen erhalten, bei denen "gf_id" mit "id" (der Wert aus "id" aus der Zeile des Treffers) übereinstimmt.

Im Fall B, wenn "gf_id" einen von 0 verschiedenen Wert hat, sollen auch Ergebnisse aus allen Zeilen zurückgegeben werden, die in "gf_id" oder in "id" den gleichen Wert hat wie "gf_id" aus der Zeile des Treffers.

Bei mehreren Wörtern in $woerter können Fall A und B gleichzeitig auftreten.

Falls die Beschreibung nicht aussreicht, ein Beispiel mit einer Abfrage mit den Wörtern spielen und sagt auf folgende Tabelle:
|id|    wort|ob_id|
-----------------
| 1|   sagen|    0|
| 2| spielen|    0|
| 3|  spielt|    2|
| 4| spielte|    2|
| 5|gespielt|    2|
| 6|  fangen|    0|
| 7|   sagte|    1|
| 8|    sagt|    1|

  • Da "spielen" paßt, soll Zeile 2 (Zeile = "id") zurückgegeben werden.
  • Da "gf_id" in Zeile 2 den Wert 0 hat, sollen nun auch alle Zeilen mit 2 in "gf_id" zurückgegeben werden also 3, 4 und 5.
  • Da "sagt" paßt, soll Zeile 7 zurückgegeben werden.
  • Da "gf_id" in Zeile 7 den Wert 1 hat, sollen nun auch alle Zeilen mit 1 in "ob_id" und in "id" zurückgegeben werden also 8 und 1.

Auf die Abfrage nach spielen, sagt und sagte sollte das gleiche Ergebnis zurückgegeben werden.

Anmerkung: Möglich, daß meine Datenbankstruktur nicht (mehr) optimal ist. Ich werde mir auch gern Vorschläge dazu anhören.

  1. !§$&!!!

    Braucht ihr die Fragen noch?

    Ist das was ich will in einer Abfrage sinnvoll* umsetzbar?
    Wenn ja, über welchen Ansatz?

    * Mit sinnvoll meine ich in erster Line "performant", also besser als über zwei einzelne Abfragen.

    1. Ist das was ich will in einer Abfrage sinnvoll* umsetzbar?

      Darf ich die Reaktionrn auf meine Frage als ein einhelliges "nein" interpretieren oder ist meine Erklärung/Fragestellung unzureichend?