Mailinglisten-Archive |
Hallo an alle! Ich grübel hier über ein Problem bei dem ich nicht weiterkomme: Ich habe folgende Tabelle: +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | bar | varchar(250) | | | | | | foo | varchar(250) | | MUL | | | +-------+--------------+------+-----+---------+----------------+ und folgende Query: select foo, bar, match(foo) against('$query' $bool_mode) as ranking from foobar where match(foo) against('$query' $bool_mode) order by ranking desc limit 0,1000 Bei einer Eingabe von boolschen Operatoren wird $bool_mode auf 'in boolean mode' gesetzt. Ich habe die Stopwords der Volltextsuche entfernt und die minimale Länge bei der Volltextsuche auf ein Zeichen gesetzt, damit auch Wörter wie 'to', 'an' o.ä. gefunden werden. Soviel zum Aufbau - das funktioniert auch ganz gut bis auf eine Kleinigkeit bei der ich einfach auf dem Schlauch stehe. Wenn ich nun nach einem String suche, der ein Wort enthält welches in der Tabelle oft vorkommt, dann bekomme ich einfach nicht die relevanten Ergebnisse aus der DB, weil das Limit vor dem order by greift. Wenn ich das Limit entferne, dann wäre es zwar okay, aber die Abfrage dauert dann so lange, daß es einen Timeout gibt. Ich möchte also eigentlich alles so lassen, allerdings sollen auch bei den Suchbegriffen, die sehr viele Treffer erzeugen, die ersten 1000 nach dem MySQL-Ranking sortierten Treffer gezeigt werden. Ich hoffe ich habe mein Problem einigermaßen verständlich rüberbringen können und hoffe auf einen Lösungsansatz, der mich mal wieder vom Schlauch herunterschubst ;) Achso, ich setze MySQL 4.0.18 ein, falls das noch wichtig sein sollte. Vielen Dank und nen lieben Gruß, Jürgen -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive