ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
282
282
EMPFEHLEN
-
15.01.12 15:40 #1
Hi zusammen,
Für eine Suchfunktion habe ich ein Script geschrieben,
Problem an der Sache ist das ich mindestens 8 Mysql Tabellen mit einer unterschiedlichen Anzahl von Spalten habe, was also ein UNION SELECT Statement ausschließt.
Ich würde das ganze eventuell mit Arrays lösen, wollte aber nochmal Euere Meinung dazu hören, wie würdet Ihr das machen ****
Mein Lösung wäre so:
So schreibe ich alle Ergebnisse in das Array $suche.PHP-Code:$search1 = "SELECT spalte1, spalte2, spalte3, spalte4 FROM tabelle WHERE spalte1 LIKE '%".$db->escape($search)."%' OR spalte2 LIKE '%".$db->escape($search)."%' OR spalte3 LIKE '%".$db->escape($search)."%' OR spalte4 LIKE '%".$db->escape($search)."%'";
$search2 = "SELECT spalte1, spalte2, spalte3 FROM tabelle2 WHERE spalte1 LIKE '%".$db->escape($search)."%' OR spalte2 LIKE '%".$db->escape($search)."%' OR spalte3 LIKE '%".$db->escape($search)."%'";
$search3 = "SELECT spalte1, spalte2, spalte3, spalte4 FROM tabelle3 WHERE spalte1 LIKE '%".$db->escape($search)."%' OR spalte2 LIKE '%".$db->escape($search)."%' OR spalte3 LIKE '%".$db->escape($search)."%' OR spalte4 LIKE '%".$db->escape($search)."%'";
$search4 = "SELECT spalte1, spalte2 FROM tabelle4 WHERE spalte1 LIKE '%".$db->escape($search)."%' OR spalte2 LIKE '%".$db->escape($search)."%'";
$result1 = $db->query($search1);
$result2 = $db->query($search2);
$result3 = $db->query($search3);
$result4 = $db->query($search4);
while ($row = $db->fetchassoc($result1))
{
$suche[] = $row;
}
while ($row = $db->fetchassoc($result2))
{
$suche[] = $row;
}
while ($row = $db->fetchassoc($result3))
{
$suche[] = $row;
}
while ($row = $db->fetchassoc($result4))
{
$suche[] = $row;
}
-
Das Problem ist, dass du so in deiner $suche Rows mit verschiedenen Spaltenmengen hast.
Dazu aber keine Angabe darüber aus welcher Tabelle das Resultat stammt.
Wie willst du am Ende das Resultat auswerten?---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Wenn Du es in der Form machen willst, dann trenne die Results im Array doch noch:
usw...PHP-Code:while ($row = $db->fetchassoc($result1))
{
$suche['result1'][] = $row;
}
while ($row = $db->fetchassoc($result2))
{
$suche['result2'][] = $row;
}
Gruß
-
15.01.12 16:03 #4
Ja das ist wohl war, das mit dem auswerten wird so schwer.
Dann sollte ich vielleicht Tabellen mit gleicher Spaltenanzahl zusammenfassen per UNION und das mit dem Array weglassen ist vielleicht sinnvoller.
-
Auch wenn die Spaltenanzahl unterschiedlich ist, kannst du doch einfach die Anzahl anpassen
Code sql:1 2 3
SELECT a, b, c FROM foo UNION SELECT a, '', '' FROM bar
Der Typ muss auch übereinstimmen, also eventuell was anderes als den Leerstring nehmen.
Ich würde ein System benutzen, dass für Textsuche gemacht ist und nicht die DB missbrauchen (http://lucene.apache.org/ , http://lucene.apache.org/solr/).
Falls das nicht in Frage kommt, dann könntest du auch eine redundante Tabelle zum Suchen anlegen, um nicht immer den Weg über mehrere Tabellen zu gehen.
-
15.01.12 17:19 #6
Funktioniert schon, ich hab nur zu komplex Gedacht.
Ich mache für jede Sparte einfach eine eigene Suchausgabe und das mit dem Array ist quatsch das bleibt weg.
Vielen Dank euch beiden
-
Das mit dem Array und dem Union ist nicht schlecht. Reduziere deine Ausgabe auf 3 Felder. Die ID und den Tabellennamenund der Name des items(Also das Feld das du anzeigen willst) .
Code sql:1 2 3 4 5 6 7 8 9 10 11
SELECT id, DESC AS item_name, 'table1' AS TABLE_NAME FROM table1 WHERE field1 LIKE '%suchbegriff%' OR field1 LIKE '%suchbegriff%' UNION ALL SELECT id, 'table12 FROM table2 WHERE field1 LIKE '%suchbegriff%' OR field1 LIKE '%suchbegriff%' OR field3 LIKE '%suchbegriff%' UNION ALL SELECT id, 'table13 FROM table3 WHERE field1 LIKE '%suchbegriff%'
Anschliessend kannst du die Resultate Anzeigen (Feld item_name). Wenn du wieder auf den Datensatz zugreiffen willst, hast du die ID und den Tabellennamen....---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
[MySql] Exists in Where-Klause - komplexe Abfrage
Von Subwoover im Forum Relationale DatenbanksystemeAntworten: 9Letzter Beitrag: 16.10.06, 14:31 -
Komplexe Abfrage aus mehreren Tabellen (MySQL 5.0)
Von Kipperlenny im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 04.08.06, 01:23 -
Komplexe Mysql Anfrage
Von Hunimou im Forum PHPAntworten: 4Letzter Beitrag: 04.09.05, 13:18 -
[MySQL+PHP] Komplexe Abfrage oder Brett vor dem Kopf?
Von Tim C. im Forum PHPAntworten: 5Letzter Beitrag: 23.03.04, 13:22 -
PHP-MySQL komplexe Delete-Anfrage
Von Jörg im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 10.11.02, 14:38





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren