where Abfrage mit vielen AND and OR :)

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

  • where Abfrage mit vielen AND and OR :)

    Hallo,

    ich habe eine where Abfrage die einwandfrei funktioniert:

    PHP-Code:
    $mysql->set_where("t1.firmen_id=".$_SESSION['firmenID'] . 
    AND t2.id=t1.firmen_id " 
    " AND status_id=7"); 
    Diese habe ich jetzt um ein paar OR Bedingungen erweitert:

    PHP-Code:
    $mysql->set_where(("t1.firmen_id=".$_SESSION['firmenID'] . "  
    OR t1.firmen_id=10" 
    " OR t1.firmen_id=15") . 
    (
    " AND t2.id=t1.firmen_id " " AND status_id=7 ")); 
    es gibt zwar keinen Fehler, aber auch nicht das gewünschte Ergebnis.

    Hat jemand von Euch eine Idee oder sieht den Fehler?

    Danke

  • #2
    hint:
    PHP-Code:
    $erst_die_query 'vorbereiten'
    dann ausgeben lassen und anschließend ausführen.

    wenn kein fehler vorliegt, wird das problem in der logik sein.

    Kommentar


    • #3
      hast du mysql_error (); zur fehlerausgabe?

      Kommentar


      • #4
        allein deine klamern sehen schon seltsam aus.

        sehr wenig info. kein mensch weiß was du eigentlich machen willst.

        mit PHP hat das mal wieder gar nichts zu tun! und verschieb

        Kommentar


        • #5
          Meistens ist die Logik falsch (vgl. Klammersetzung in Mathe).
          Wie oben schon erwähnt: wenn nicht genau beschrieben wird, was erreicht werden soll, dann wird hier kaum eine Lösung möglich sein.

          Gruß
          Stephan
          [font=Verdana]SteGaSoft
          Theorie ist, wenn jeder weiß, wie es geht, aber nichts funktioniert, Praxis ist, wenn alles funktioniert und niemand weiß warum.
          [/font]

          Kommentar


          • #6
            Hallo Zusammen,

            das Ergebnis soll liefern:

            Alle Einträge aus der project tabelle wo die firmen_id die der Session entspricht oder die firmen_id=10 ist oder die firmen_id=15 ist UND der Status z.B. 7 ist!

            t1 ist dabei die tabelle der firma
            t2 ist die project tabelle mit dem Eintrag firmen_id, dort steht u.a. auch der Status

            das Ergebnis liefert zurzeit:

            bei einträgen die die firmen_id=15 haben, alles korrekt
            bei einträgen die die firmen_id =10 haben, werden die Einträge achtmal ausgegeben und der Status wird ignoriert


            Gruß
            Frank
            Zuletzt geändert von thurman; 25.07.2005, 11:07.

            Kommentar


            • #7
              dann solltest du so Klammer setzen:

              Alle Einträge aus der project tabelle wo die (firmen_id die der Session entspricht oder die firmen_id=10 ist oder die firmen_id=15 ist) UND der Status z.B. 7 ist!

              Kommentar


              • #8
                $mysql->set_where(("t1.firmen_id=".$_SESSION['firmenID'] . "
                OR t1.firmen_id=10" . " OR t1.firmen_id=15") . "
                AND t2.id=t1.firmen_id " . " AND status_id=7 ");

                habe die Klammern jetzt anders gesetzt, ändert leider am Ergebnis nichts.
                Ich denke der Fehler liegt hier AND t2.id=t1.firmen_id, dies bezieht sich dann nur noch auf die zu letzt angegebene ID 15. Das müsste er in der
                Abfrage jedoch für die SessionID und für die ID 10 auch machen.

                Kommentar


                • #9
                  so wie es da steht, musst du eine Fehlermeldung erhalten! Es sei denn, du postest nicht den Code, was du im Script hast.

                  btw.: was soll denn die Auftrennung mittendrin im String

                  Kommentar


                  • #10
                    ist nur formatiert wegen der Breite ansonsten 100% wie im Quellcode, keine Fehlermeldung

                    MySQL->select: SELECT * FROM project_auftrag as t1,project_firmenprofil as t2 where t1.firmen_id=16 OR t1.firmen_id=10 OR t1.firmen_id=15 AND t2.id=t1.firmen_id AND status_id!=7 order by auftragsnummer ASC
                    MySQL->select: SELECT t1.id,auftragsnummer, firmen_id, bezeichnung, datum, status_id, stunden, preface_contactID1, preface_contactID2, preface_contactID3, kunde_contactID1, kunde_contactID2, kunde_contactID3 FROM project_auftrag as t1,project_firmenprofil as t2 where t1.firmen_id=16 OR t1.firmen_id=10 OR t1.firmen_id=15 AND t2.id=t1.firmen_id AND status_id!=7 order by auftragsnummer ASC limit 0,13
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10
                    MySQL->select: SELECT * FROM project_firmenprofil where id=10

                    und das bekomme ich zurück
                    Zuletzt geändert von thurman; 25.07.2005, 11:55.

                    Kommentar


                    • #11
                      mach mal so:
                      PHP-Code:
                      SELECT FROM project_auftrag t1 INNER JOIN project_firmenprofil t2 
                         ON t2
                      .id=t1.firmen_id
                            WHERE 
                      (t1.firmen_id=16 OR t1.firmen_id=10 OR t1.firmen_id=15)     
                                         AND 
                      status_id!=
                            ORDER BY auftragsnummer ASC 
                      was Fehler angeht: direkt an set_where 2 runde Klammer und nur eine schliessende Klammer in der Abfrage, aber es erzeugt keine Fehlermeldung?
                      Zuletzt geändert von asp2php; 25.07.2005, 11:58.

                      Kommentar


                      • #12
                        gehen doch 2 Klammern wieder zu. Nach id=15 und nach id=7
                        das andere werde ich mal ausprobieren

                        Kommentar


                        • #13
                          Original geschrieben von thurman
                          gehen doch 2 Klammern wieder zu. Nach id=15 und nach id=7
                          das andere werde ich mal ausprobieren
                          aber damit gehören die Klammer nicht mehr in die SQL-Abfrage rein, sondern sie existieren nur PHP-seitig, daher bekommst du nicht das was du willst. Fazit: lerne PHP richtig, dann funz auch mit Umsetzung von unseren Tipps.

                          Kommentar


                          • #14
                            aber damit gehören die Klammer nicht mehr in die SQL-Abfrage rein, sondern sie existieren nur PHP-seitig, daher bekommst du nicht das was du willst.
                            Das ist genau mein Fehler gewesen und die Lösung für mein Problem, dafür danke ich dir. Manchmal sieht man vor lauter Bäumen den Wald nicht!

                            Fazit: lerne PHP richtig, dann funz auch mit Umsetzung von unseren Tipps.
                            Der Umgangston in diesem Forum ist ja nicht gerade der freundlichste, das habe ich in vielen anderen Beiträgen bereits gelese. Schade

                            Viele Grüße Frank

                            Kommentar

                            Lädt...
                            X