SQL Where In Array OR

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

  • SQL Where In Array OR

    Hallo,

    ich sitze an einem Projekt und komme nun nicht weiter vor folgendem Problem:

    Die SQL Abfrage funktioniert auf unseren localhost (MySql Server Version: 5.5.11) jedoch nicht auf auf dem 1und1 (MySql Server Version:5.0)

    Die SQL-abfrage scheitert, sobald "OR p.festservice_b IN (Array) OR p.festservice_c IN (Array)"nach der p.festservice_a steht.

    u.Dienste_budget, u.Dienste_gebiet und u.Dienste_service sind Datentypen

    Wäre toll, wenn jemand bestätigen oder dementieren könnte dies für mich. Danke

    PHP-Code:
          public function getProducts($userid$sort false)
          {
              global 
    $db;
              
             (
    $sort) ? $order $sort $order "p.date DESC";
                        
              
    $where "WHERE NOT EXISTS (SELECT * FROM utransactions AS t WHERE t.user_id = '{$userid}' AND t.product_id = p.token)"
              
    "\n AND p.approved='yes'"
              
    "\n AND p.status='1'"
              
    "\n AND u.uid = '" $userid "'"
              
    "\n AND p.budget_id IN (u.Dienste_budget)"
              
    "\n AND p.gebiet_id IN (u.Dienste_gebiet)"          
              
    "\n AND (p.festservice_a IN (u.Dienste_service)"
              
    "\n OR p.festservice_b IN (u.Dienste_service)"
              
    "\n OR p.festservice_c IN (u.Dienste_service))";
              
              
    $sql "SELECT p.*,"
              
    "\n DATE_FORMAT(p.date, '%d.%m.%Y') as created," 
              
    "\n DATE_FORMAT(p.festdatum, '%d.%m.%Y') as festdate,"
              
    "\n (TO_DAYS(NOW()) - TO_DAYS(p.festdatum)) as days,"
              
    "\n TO_DAYS(DATE_ADD(p.festdatum,INTERVAL -1 DAY))- TO_DAYS(NOW()) as expiry"
              
    "\n FROM products AS p, usersettings AS u " $where " ORDER BY " $order;
              
    $row $db->fetch_all($sql);
              
              return 
    $row;

          } 

  • #2
    Hallo und willkommen im Forum!

    Bitte Forenregeln (= Grundlagen zur Problembehebung) beachten und vollständige Fehlermeldungen zitieren. „Funktioniert nicht“ ist keine Fehlerbeschreibung und lässt uns sinnlos im Dunkeln tappen. Daher landen „funzt nicht“-Thread gerne mal auf dem Abstellgleis.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von AmicaNoctis Beitrag anzeigen
      Hallo und willkommen im Forum!

      Bitte Forenregeln (= Grundlagen zur Problembehebung) beachten und vollständige Fehlermeldungen zitieren. „Funktioniert nicht“ ist keine Fehlerbeschreibung und lässt uns sinnlos im Dunkeln tappen. Daher landen „funzt nicht“-Thread gerne mal auf dem Abstellgleis.

      Gruß,

      Amica
      Diese Methode wird allgemein als die einfachste und schnellste aufgefasst.
      Traditionelle Methode: Kopieren und Einfügen. Eine gut gestellte Frage ist schon halb beantwortet. Danke

      Kommentar


      • #4
        Zitat von engine Beitrag anzeigen
        Diese Methode wird allgemein als die einfachste und schnellste aufgefasst.
        Traditionelle Methode: Kopieren und Einfügen.
        Was möchtest du damit sagen? Ich versteh's nicht.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Was soll uns das jetzt sagen?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            erm -.- ich mach dann mal den Dolmetscher ...

            sein "funzt nicht" heißt in dem Fall -> die SQL-Abfrage liefert nicht die erwarteten Ergebnisse

            und das liegt daran, dass du die einzelnen WHERE-Klauseln nicht sinnvoll zusammengefasst hast

            die per AND verbundenen Teile wirken "zusammen", während OR diese Verbindung aufhebt und separat betrachtet wird .
            du müsstest also die 3 Teile, die per OR verbunden sind einmal per Klammer zusammenfassen
            nach dem Muster
            where a and b and (c or d or e) AND f .....

            eventuell musst du im mysql-Handbuch mal die Operator-Präzedenz nachschlagen, es kann sogar sein, dass OR dein IN beeinflußt und du demzufolge nochmal klammern musst

            ansonsten hilft es in solchen Fällen fast immer ,wenn du dein Script die Abfrage mit Werten befüllen lässt und dann AUSGIBST (DIE ABFRAGE !!)-

            die Ausgabe im Browserfenster wird kopiert und im SQL-Fenster von phpmyadmin ausgeführt ...
            Zuletzt geändert von eagle275; 19.07.2011, 15:37.
            [font=Verdana]
            Wer LESEN kann, ist klar im Vorteil!
            [/font]

            Kommentar

            Lädt...
            X