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(
IDint(11) NOT NULL auto_increment,
nametext character set utf8 NOT NULL,
zutat1text character set utf8 NOT NULL,
zutat2text character set utf8 NOT NULL,
zutat3text character set utf8 NOT NULL,
zutat4text character set utf8 NOT NULL,
zutat5text character set utf8 NOT NULL,
zutat6text character set utf8 NOT NULL,
zutat7text character set utf8 NOT NULL,
zutat8text character set utf8 NOT NULL,
zutat9text character set utf8 NOT NULL,
zutat10text character set utf8 NOT NULL,
texttext character set utf8 NOT NULL,
zeitsmallint(11) unsigned NOT NULL,
PRIMARY KEY (ID),
FULLTEXT KEYzutaten(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.
Maik

Maik. W. aus E. sagt Dankeschön ;-)