Maximilian: Anzahl der Übereinstimmungen einer Suchabfrage ausgeben

Hallo zusammen!

Ich schreibe gerade in PHP und MySQL eine Seite, auf der man Rezepte eintragen und dann nach Eingabe von Zutaten in eine Suchmaske wieder abrufen können soll.
Meine Datenbank (relational aufgebaut) besteht aus zwei Tabellen:

+----+---------+
| ID |   name  |
+----+---------+
| 7  |Wurstbrot|
+----+---------+
| 8  |Butterbrot|
+----+---------+

+---------+----------+
|rezept_ID|   zutat  |
+---------+----------+
| 7       |   Wurst  |
+---------+----------+
| 7       |   Brot   |
+---------+----------+
| 8       |   Butter |
+---------+----------+
| 8       |   Brot   |
+---------+----------+

Trägt jemand zum Beispiel das Rezept "Wurstbrot" ein, wird in die erste Tabelle (Rezepte) über auto-increment eine ID sowie der Name des Rezepts geschrieben.
In die zweite Tabelle werden die Zutaten geschrieben und außerdem die ID des Rezepts (als "rezept_ID" gespeichert), damit man die Zutaten den dazugehörigen Rezepten zuordnen kann.

Meine Suchabfrage (mit Subselect) sieht momentan so aus:

$abfrage = "SELECT name FROM rezepte
            WHERE (ID) = ANY (SELECT rezept_ID FROM zutaten
                              WHERE MATCH (zutat)
                              AGAINST ('    ".mysql_real_escape_string($_POST['zutat1'])."*
                                            ".mysql_real_escape_string($_POST['zutat2'])."*  ' IN BOOLEAN MODE)
                              )";

Und die Ausgabe so:

$resultat = mysql_query($abfrage) or die (mysql_error());

echo " <table> ";

while ($row = mysql_fetch_array($resultat))
 {
   extract ($row);
   echo "  <tr>
           <td> $name </td>
           </tr> ";
 }

echo " </table> ";

Das funktioniert auch soweit. Sucht man beispielsweise nach der Zutat Wurst, erhält man als Ergebnis das Rezept Wurstbrot. Sucht man nach Wurst und Brot, spuckt die Suche Wurstbrot und Butterbrot aus, da in beiden Rezepten Brot enthalten ist.

Ich suche jetzt nach einer Möglichkeit, die Anzahl der Übereinstimmungen der gesuchten Zutaten mit dem jeweiligen Rezept auszugeben. (Bei der Suche nach Wurst und Brot, würde das Rezept Wurstbrot also 2 Übereinstimmungen liefern, Butterbrot nur eine.)

Hat jemand eine Idee?

  1. Hello,

    +----+---------+
    | ID |   name  |
    +----+---------+
    | 7  |Wurstbrot|
    +----+---------+
    | 8  |Butterbrot|
    +----+---------+

    da fehlt eine M:N Auflösung

    ID_REZEPT   ID_ZUTAT
         7           1
         7           2
         7           3
         8           2
         8           3

    +---------+----------+
    |ID       |   zutat  |
    +---------+----------+
    | 1       |   Wurst  |
    +---------+----------+
    | 2       |   Brot   |
    +---------+----------+
    | 3       |   Butter |
    +---------+----------+

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. da fehlt eine M:N Auflösung

      ID_REZEPT   ID_ZUTAT
           7           1
           7           2
           7           3
           8           2
           8           3

      Jede Zutat hat eine eigene ID (auto-increment). Habe die Spalte nur aus Gründen der Übersichtlichkeit weggelassen.

      Danke trotzdem und Gruß auf den Berg!