Maik W. aus E.: Fragen zur Volltextsuche

Beitrag lesen

Tach auch Max,

Danke für die Antwort erstmal!
Ich habe jetzt mal einen FULLTEXT-Index angelegt und den Feldern den Typ "Text" statt "Tinytext" zugewiesen. Allerdings bekomme ich trotzdem die Fehlermeldung "Can't find FULLTEXT index matching the column list".

Das weist darauf hin, daß der Index und das "MATCH AGAINST" nicht übereinstimmen

Mein PHP-Quelltext sieht folgendermaßen aus:

Nur das SQL-Statement ist -eigentlich- relevant...

$name    = $_POST["name"];
    $zutat1  = $_POST["zutat1"];
    $zutat2  = $_POST["zutat2"];

[...]
Das kannst Du Dir sparen, verwende einfach die $_POST-Variablen.

$abfrage = "SELECT * FROM rezepte
                WHERE MATCH (zutat1,zutat2,zutat3,zutat4,zutat5,zutat6,zutat7,zutat8,zutat9,zutat10)
                AGAINST ('$zutat1*, $zutat2*, $zutat3*, $zutat4*, $zutat5*, $zutat6*, $zutat7*, $zutat8*, $zutat9*, $zutat10*')";

Wo kommen diese Sterne her? Was soll das?

Das mySQL-CREATE TABLE sieht so aus:

CREATE TABLE rezepte (
  ID int(11) NOT NULL auto_increment,
  name text character set utf8 NOT NULL,
  zutat1 text character set utf8 NOT NULL,
  zutat2 text character set utf8 NOT NULL,
  zutat3 text character set utf8 NOT NULL,
  zutat4 text character set utf8 NOT NULL,
  zutat5 text character set utf8 NOT NULL,
  zutat6 text character set utf8 NOT NULL,
  zutat7 text character set utf8 NOT NULL,
  zutat8 text character set utf8 NOT NULL,
  zutat9 text character set utf8 NOT NULL,
  zutat10 text character set utf8 NOT NULL,
  text text character set utf8 NOT NULL,
  zeit smallint(11) unsigned NOT NULL,
  PRIMARY KEY  (ID),
  FULLTEXT KEY zutaten (name,zutat1,zutat2,zutat3,zutat4,zutat5,zutat6,zutat7,zutat8,zutat9,zutat10)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
]

Und hier ist der Unterschied! Im Index ist 'name' mit drin. Fang doch erstmal klein an im Sinne von

  
SELECT name FROM rezepte WHERE MATCH  
     (zutat1, zutat2, zutat3)  
     AGAINST ('$POST[such_zutat]')  
;  

Was machst Du denn mit Rezepten, die mehr als zehn Zutaten haben? Bei weniger »» Zutaten schleppst Du viel leere Felder mit.
Ich hatte eigentlich vor später noch mehr Felder hinzuzufügen und dachte, dass sich leere Felder nicht auf die Performance der Suche auswirken.
Dein Vorschlag wäre, alle Zutaten eines Rezeptes in ein Tabellenfeld zu speichern?

Oh nein, ich würde die Zutaten in eine Tabelle tun, die Rezepte in eine andere und die beiden über eine Kreuztabelle verknüpfen. Dann kann man x-beliebig viele Zutaten mit x-beliebig vielen Rezepten performant n:m miteinander verknüpfen...

Nochmals danke für jede Hilfe!

Gern geschehen.

http://www.gruss-aus-essen.de

Maik

--
Diese Dauerleihgabe wird Ihnen präsentiert von ROMY!
Maik. W. aus E. sagt Dankeschön ;-)