Mailinglisten-Archive |
Mahlzeit! Dr. Franz-Josef Huecker wrote: >At 09:31 23.07.02 +0200, you wrote: > > > >>könntest du ein wenig konkreter werden ? >>tabellen, struktur ... ausgaben ? >>fakten halt .... >> >> > >Hallo Heinz > >Danke fuer die Nachfrage. Es geht konkret darum, dass die Daten fuer ein >Diskussionsforum nach Topics und Antworten in zwei MySQL-Tabellen und dort >eben eben in zwei bzw. einer Spalte gespeichert werden, die nach beliebig >vielen Stichwoerter mit AND- bzw. OR-Verknuepfung und weiteren >Restriktionen zu durchsuchen sind. > > topics-table: "f_thread", cols: subject, message; replies-table: >"f_threads", cols: message > > Also das ist offensichtlich nicht wirklich komplett und meine Antwort ist daher auf eigenen 'Vermutungen' aufgebaut. ( f_thread enthält weitere Attribute, mindestens: fid, forum, mdate f_threads enthält mindestens fid ) >So koennte etwa jemand in das Eingabefeld einer Suchmaske [mysql suchen >fritz] eingeben, weil er gehoert hat, dass Fritz einen tollen Beitrag zu >den MySQL-Suchmoeglichkeiten geschrieben hat und dass es sehr viele >Antworten dazu gibt, und klickt dazu noch UND- bzw. ODER-Verknuepfung an. >Ausserdem gibt es weitere Optionen, wie etwa zeitliche Ausgabe, Beitraege >der letzten 24 Stunden, und die Beschraenkung auf ein bestimmtes >thematisches Forum. > >Nun sollen beide Tabellen in einem Zug durchsucht werden und alle Beitraege >ausgeben, die geschrieben wurden zu 'MySQL && suchen && Fritz' bzw. zu >'MySQL || suchen || Fritz'. Der Select-Befehl, den ich zur Zeit nutze >(s.u.), leistet das nicht, sondern wuerde in diesem Fall nur Datensaetze >ausgeben, in denen sich der String "mysql suchen Fritz" findet und wuerde >wahrscheinlich dann ueberhaupt keine Treffer ausgeben koennen obwohl es >ueber hunderte von Beitraegen gibt, die diese Stichwoerter insgesamt oder >teilweise enthalten. > >-- >SELECT DISTINCT f_thread.* FROM f_thread,f_threads WHERE f_thread.fid = >f_threads.fid && f_threads.message LIKE '%$keywords%' && f_threads.rdate >= >'$show_time' && f_thread.forum = '$forum' || f_thread.subject LIKE >'%$keywords%' && f_thread.mdate >= '$show_time' && f_thread.forum = >'$forum' || f_thread.message LIKE '%$keywords%' && f_thread.mdate >= >'$show_time' && f_thread.forum = '$forum' ORDER BY fid DESC LIMIT $first, >$p_split; > Erstmal: für einen SQL-Menschen sehen die && und || schrecklich aus ;-) ansonsten einfach mal f_threads.message LIKE '%$keywords%' ersetzen durch f_threads.message LIKE '%$keyword1%' AND f_threads.message LIKE '%$keyword2%' AND f_threads.message LIKE '%$keyword3%' bzw. die AND durch OR ersetzen. SELECT DISTINCT t.* FROM f_thread t, f_threads r WHERE t.fid = r.fid AND ( ( r.message LIKE '%$keyword1%' AND r.message LIKE '%$keyword2%' ... AND r.message LIKE '%$keywordN%' AND r.rdate >= '$show_time' AND t.forum = '$forum' ) OR ( t.subject LIKE '%$keyword1%' AND t.subject LIKE '%$keyword2%' ... AND t.subject LIKE '%$keywordN%' AND t.mdate >= '$show_time' AND t.forum = '$forum' ) OR ( t.message LIKE '%$keyword1%' AND t.message LIKE '%$keyword2%' ... AND t.message LIKE '%$keywordN%' AND t.mdate >= '$show_time' AND t.forum = '$forum' ) ) ORDER BY fid DESC LIMIT $first, $p_split ; So in etwa könnte das Statement aussehen... Gruß Ralf -- Ralf Narozny SPLENDID Internet GmbH & Co KG Skandinaviendamm 212, 24109 Kiel, Germany fon: +49 431 660 97 0, fax: +49 431 660 97 20 mailto:rnarozny_(at)_splendid.de, http://www.splendid.de --- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive