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 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 ;-)