Ankündigung

Einklappen
Keine Ankündigung bisher.

komplizierte SQL-Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • komplizierte SQL-Abfrage

    Tabelle hat unter anderem folgende Felder: ueberschrift (varchar), kurztext (text), langtext (text), von (date)... und einige mehr

    Problem: Es soll in den o.g. Feldern gesucht werden ob 3 Suchworte vorhanden sind, wobei jedes der Suchworte mind. einmal vorkommen muss.
    Die Suchworte können enthalten: Ziffern, Buchstaben und Bindstrich (für Datumsformat)

    meine Lösungsansätze:
    Variante 1
    PHP-Code:
            $sql "SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format FROM texte WHERE 
            (ueberschrift LIKE '%"
    .$suchworte[0]."%' OR ueberschrift LIKE '%".$suchworte[1]."%' OR ueberschrift LIKE '%".$suchworte[2]."%') 
            AND (kurztext LIKE '%"
    .$suchworte[0]."%' OR kurztext LIKE '%".$suchworte[1]."%' OR kurztext LIKE '%".$suchworte[2]."%') 
            AND (text LIKE '%"
    .$suchworte[0]."%' OR text LIKE '%".$suchworte[1]."%' OR text LIKE '%".$suchworte[2]."%') 
            AND (von LIKE '%"
    .$suchworte[0]."%' OR von LIKE '%".$suchworte[1]."%' OR von LIKE '%".$suchworte[2]."%') 
            ORDER BY von DESC"

    dise Abfrage funktioniert natürlich nicht weil er dann in jedem der 4 Felder mind. ein Suchwort braucht und wenn ich die ANDs mit OR ersetze dann entspricht das ja auch nicht dem Problem weil er dann jeden Datensatz findet, in dem mind. 1 und nicht alle 3 Suchworte vorhanden sind.

    Variante 2 - Subqueries
    Da ist leider das Problemchen dass ich von Subqueries keine Ahnung habe und die Infos im Netz dürftig sind. So habe ich in 2 Std keinerlei Infos gefunden wie oft ich IN verwenden kann, innerhalb einer Abfrage.
    meine Idee ist ein solches Konstrukt:
    PHP-Code:
            $sql "SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format 
            FROM texte 
            WHERE ueberschrift LIKE '%"
    .$suchworte[0]."%' OR ueberschrift LIKE '%".$suchworte[1]."%' OR ueberschrift LIKE '%".$suchworte[2]."%' 
            IN 
                (SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format 
                FROM texte 
                WHERE kurztext LIKE '%"
    .$suchworte[0]."%' OR kurztext LIKE '%".$suchworte[1]."%' OR kurztext LIKE '%".$suchworte[2]."%'
                IN
                    (SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format 
                    FROM texte 
                    WHERE text LIKE '%"
    .$suchworte[0]."%' OR text LIKE '%".$suchworte[1]."%' OR text LIKE '%".$suchworte[2]."%' 
                    IN
                         (SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format 
                         FROM texte 
                         WHERE von LIKE '%"
    .$suchworte[0]."%' OR von LIKE '%".$suchworte[1]."%' OR von LIKE '%".$suchworte[2]."%' 
            )))ORDER BY von DESC"

    Fehlermeldung:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN (SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format FROM texte ' at line 4


    Irgendwie dreht sich jetzt zwar alles im Kopf aber es kommt nix raus. Über einen Wink mit einem grossen Zaunspfahl wäre ich sehr dankbar.

    Danke schon im voraus und guten Hunger

  • #2
    drüber geschlafen und immer noch im irrgarten looking for zaunspfahl

    Kommentar


    • #3
      ok erstmal eine notlösung gefunden.
      um die eleganz kümmern "wir" uns nächste woche


      PHP-Code:
      ### wenn ueberschrift suchwort[0] enthält dann prüfe in allen 3 feldern ob das 2.suchwort auch vorhanden ist und flals das auch zutrifft suche noch in allen 3 feldern nach dem 3.suchwort
              
      $erg=mysql_query("SELECT *,DATE_FORMAT(von, '%d.%m.%Y') AS von_format 
              FROM texte         
              WHERE (ueberschrift LIKE '%"
      .$suchworte['0']."%' AND (ueberschrift LIKE '%".$suchworte['1']."%' OR kurztext LIKE '%".$suchworte['1']."%' OR text LIKE '%".$suchworte['1']."%') AND (ueberschrift LIKE '%".$suchworte['2']."%' OR kurztext LIKE '%".$suchworte['2']."%' OR text LIKE '%".$suchworte['2']."%')) 
              OR (kurztext LIKE '%"
      .$suchworte['0']."%' AND (ueberschrift LIKE '%".$suchworte['1']."%' OR kurztext LIKE '%".$suchworte['1']."%' OR text LIKE '%".$suchworte['1']."%') AND (ueberschrift LIKE '%".$suchworte['2']."%' OR kurztext LIKE '%".$suchworte['2']."%' OR text LIKE '%".$suchworte['2']."%')) 
              OR (text LIKE '%"
      .$suchworte['0']."%' AND (ueberschrift LIKE '%".$suchworte['1']."%' OR kurztext LIKE '%".$suchworte['1']."%' OR text LIKE '%".$suchworte['1']."%') AND (ueberschrift LIKE '%".$suchworte['2']."%' OR kurztext LIKE '%".$suchworte['2']."%' OR text LIKE '%".$suchworte['2']."%')) 
              ORDER BY von DESC"
      ); 

      Kommentar


      • #4
        Kleiner Tipp: http://www.php.de/mysql/973-tool-sql-formatter.html

        Kommentar

        Lädt...
        X