Max: Fragen zur Volltextsuche

Beitrag lesen

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".

Mein PHP-Quelltext sieht folgendermaßen aus:

<?php
error_reporting(E_ALL); // alle Fehler anzeigen

@mysql_connect('localhost:8889', 'root', 'root') or die ("Keine Verbindung moeglich");
    mysql_select_db("test") or die ("Die Datenbank existiert nicht");

$name    = $_POST["name"];
    $zutat1  = $_POST["zutat1"];
    $zutat2  = $_POST["zutat2"];
    $zutat3  = $_POST["zutat3"];
    $zutat4  = $_POST["zutat4"];
    $zutat5  = $_POST["zutat5"];
    $zutat6  = $_POST["zutat6"];
    $zutat7  = $_POST["zutat7"];
    $zutat8  = $_POST["zutat8"];
    $zutat9  = $_POST["zutat9"];
    $zutat10 = $_POST["zutat10"];
    $text    = $_POST["text"];
    $zeit    = $_POST["zeit"];

$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*')";

$resultat = mysql_query($abfrage) or die (mysql_error());  // -- FEHLERMELDUNG!! --

echo "<font size=1><br />";
    echo "<table border=none bgcolor=#d3d3d3>";

while ($row = mysql_fetch_array($resultat)) // Sämtliche Datensätze durchlaufen und ausgeben
    {
      extract ($row);      // Mithilfe der Feldbezeichnungen auf Feldinhalte zugreifen und diese ausgeben
      echo "<tr>
              <td width=250 height=30><a href=#><b>$name</b></a></td>
             <td width=100 height=30>$zutat1</td>
             <td width=100 height=30>$zutat2</td>
             <td width=100 height=30>$zutat3</td>
             <td width=100 height=30>$zutat4</td>
             <td width=100 height=30>$zutat5</td>
             <td width=100 height=30>$zutat6</td>
             <td width=100 height=30>$zutat7</td>
             <td width=100 height=30>$zutat8</td>
             <td width=100 height=30>$zutat9</td>
             <td width=100 height=30>$zutat10</td>
             <td width=250 height=30>$text</td>
             <td width=50  height=30>$zeit</td>
        </tr>";
    }

echo "</table>";
    echo "</font>";
?>

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

oder so in phpMyAdmin:

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?

Nochmals danke für jede Hilfe!