tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
282
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    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:

    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

    So schreibe ich alle Ergebnisse in das Array $suche.
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Wenn Du es in der Form machen willst, dann trenne die Results im Array doch noch:
    PHP-Code:
    while ($row $db->fetchassoc($result1))
    {
        
    $suche['result1'][] = $row
    }
    while (
    $row $db->fetchassoc($result2))
    {
        
    $suche['result2'][] = $row

    usw...

    Gruß
     

  4. #4
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    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.
     

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    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.



    Zitat Zitat von Starfox2007 Beitrag anzeigen
    wie würdet Ihr das machen
    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.
     

  6. #6
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    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
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  1. [MySql] Exists in Where-Klause - komplexe Abfrage
    Von Subwoover im Forum Relationale Datenbanksysteme
    Antworten: 9
    Letzter Beitrag: 16.10.06, 14:31
  2. Komplexe Abfrage aus mehreren Tabellen (MySQL 5.0)
    Von Kipperlenny im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 04.08.06, 01:23
  3. Komplexe Mysql Anfrage
    Von Hunimou im Forum PHP
    Antworten: 4
    Letzter Beitrag: 04.09.05, 13:18
  4. Antworten: 5
    Letzter Beitrag: 23.03.04, 13:22
  5. PHP-MySQL komplexe Delete-Anfrage
    Von Jörg im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 10.11.02, 14:38