Zur Navigation

SQL-Datenbank durchsuchen

1 AndiN

Hallo,

ich sitze gerade an einer Suchfunktion.
Bisher habe ich das so realisiert:

for($i=0;$i<=count($array_search_user);$i++)
{
$keys.= "(Headline LIKE '%".mysql_escape_string($array_search_user[$i])."%' OR Contenttext LIKE '%".mysql_escape_string($array_search_user[$i])."%') AND ";
}
$keys = substr($keys,0,-5);
$sql = mysql_connect($host,$user,$pword);
mysql_select_db($db,$sql);
$query = "SELECT ID,Headline,Contenttext FROM user WHERE (".$keys.") ORDER BY Headline";
$connect = mysql_query($query) or die(mysql_error());

Hier passiert also eine Suche im Feld Headline und im Feld Contenttext. Das "AND" brauche ich wenn im Suchfeld mehrere Begriffe eingetragen werden und somit das Array $array_search_user mehrere Einträge enthält.

Diese Methode der Durchsuchung ist okay für ein paar Felder. Jetzt will ich aber eine Suche über eine komplette Datenbank machen. D.h. ich hätte eine mörderische Abfrage wenn ich z.B. 10 DB-Tabellen mit jeweils 30 Felder auf diese Weise durchsuchen müsste.

Gibt es eine Möglichkeit per PHP zu sagen:

if($suchberiff in DB gefunden return Tabelle und Feld) ?


Gruß,
Andreas

03.02.2010 12:54

2 Jörg

Ich bin mir nicht sicher, ob ich dich richtig verstanden habe

Gibt es eine Möglichkeit per PHP zu sagen:

if($suchberiff in DB gefunden return Tabelle und Feld) ?

Möchtest du nur den ersten Fund aus der Datenbank holen? Das könntest du mit dem SQL-Statement "LIMIT 1";

Wenn du die Datenbanktabellen nacheinander abfragst, kannt du auch mit mysql_num_rows() die Anzahl der Ergebnisse abfragen und gegebenenfalls abbrechen

03.02.2010 16:30 | geändert: 03.02.2010 16:30

3 AndiN

Hallo Jörg,

nein darum geht es mir nicht.

Ich habe eine Website mit den Menüpunkten "Menüpunkt 1", "Menüpunkt 2", "Menüpunkt 3", "Menüpunkt 4". Die jeweiligen Menüpunktinhalte sind in seperaten SQL-Tabellen abgelegt ("mp1", "mp2", "mp3", "mp4")

Nun möchte ich eine Volltextsuche über alle Spalten der o.g. vier SQL-Tabellen machen und will wissen, ob ich alle Spalten die ich durchsuchen möchte mit spaltenname LIKE %suchbegriff% ansprechen muss oder ob ich auch sagen kann, er soll alle Spalten der vier DB-Tabellen durchsuchen ohne, dass ich ihm jede Spalte aufzählen und mit LIKE verknüpfe.

Pseudocode:

SELECT ID,Headline,Contenttext FROM allen_zu_durchsuchenden_tables WHERE (mp1 LIKE '%".$suchbegriff."%' OR mp2 LIKE '%".$suchbegriff."%' OR mp3 LIKE '%".$suchbegriff."%' OR mp4 LIKE '%".$suchbegriff."%') ORDER BY Headline

Ich bräuchte quasi sowas wie eine JOIN-Konstruktion die ich dann durchsuchen kann oder so.

Hinweis:
Die Spaltenanzahl und Bezeichnungen der Menüpunkte sind komplett identisch.

04.02.2010 10:45

4 Jörg

Die SELECT Abfragen mehrerer gleichartiger Tabellen können mit UNION miteinander verknüpft werden:

http://dev.mysql.com/doc/refman/5.1/de/union.html

... also in deinem Fall etwa so:

(SELECT ID,Headline,Contenttext FROM table_1 WHERE (mp1 LIKE '%".$suchbegriff."%' OR mp2 LIKE '%".$suchbegriff."%' OR mp3 LIKE '%".$suchbegriff."%' OR mp4 LIKE '%".$suchbegriff."%'))
UNION
(SELECT ID,Headline,Contenttext FROM table_2 WHERE (mp1 LIKE '%".$suchbegriff."%' OR mp2 LIKE '%".$suchbegriff."%' OR mp3 LIKE '%".$suchbegriff."%' OR mp4 LIKE '%".$suchbegriff."%'))
ORDER BY Headline

Ich kenne leider keinen Weg, dies weiter zusammenzufassen.
Der Code einer solchen Abfrage mag zwar "mörderisch" sein - aber ich könnte mir vorstellen, dass so eine UNION Abfrage über mehrere kleine Tabellen für die Datebank nicht viel zeitaufwendiger ist als eine Abfrage über eine große Gesamt-Tabelle.

04.02.2010 11:08

Beitrag schreiben (als Gast)





[BBCode-Hilfe]