Abfrageproblem WHERE IN

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

  • Abfrageproblem WHERE IN

    Hallo!
    Ich habe eine (mitlerweile) recht komplexe Abfrage, die auf eine Mitgliedertab. und eine Aufgabentab zugreift (über eine Verbindungstabelle).

    Da es verschiedene Aufgabentypen gibt, kann der User aus 2 DropDownfelder sich Aufgaben zusammenmixen. Multi-DropDown.
    AufgabeID[];
    AufgabeAmtID[]

    Die beiden ankommenden Arrays verarbeite ich so:
    PHP-Code:
    $auswahlliste1 $_POST["AufgabeID"];
    $auswahlliste2$_POST["AufgabeAmtID"];

    for (
    $i=0;$i<sizeof($auswahlliste1);++$i)
    $WhereAbfrageAufgabeA="(IDAufgabe IN(".implode(',',$auswahlliste1).")";
                            
    for (
    $i=0;$i<sizeof($auswahlliste2);++$i)
    $WhereAbfrageAufgabeB=" AND IDAufgabe IN(".implode(',',$auswahlliste2).")";

    $WhereAbfrageAufgabe=$WhereAbfrageAufgabeA $WhereAbfrageAufgabeB.")";
    #$WhereAbfrageAufgabe schicke ich an SELECT 
    Ausgabe:
    PHP-Code:
    WHERE ((IDAufgabeIN 68 ) ) AND (IDAufgabe IN 23 ) )) AND.... 
    Ich WILL alle User ausgeben die die Aufgabe 68 UND 23 haben....
    Eine erweiterte Abfrage könnte so aussehen.
    PHP-Code:
    WHERE (IDAufgabe IN(50,65) AND IDAufgabe IN(13,14,18)) AND.... 
    Leider macht das Skript da nicht mit. Geht das überhaupt? Ich bin langsam verwirrt....
    Besten Dank für irgendeinen Tipp.

  • #2
    PHP-Code:
    mysql_error(); 
    desweiteren zusammengeschusterte Query ausgeben und in phpmyadmin probieren

    Kommentar


    • #3
      Kein Error! Direkt DB-Abfrage läuft problemlos, liefert aber nicht das gewünschte Ergebnis.
      Es gibt einen User der Aufgabe 68 UND 23 hat!

      Kommentar


      • #4
        Natürlich geht das, aber anhand deiner Query-Fitzelchen, keine vernünftigen Datengrundlage, und auch einer eher unzureichenden Problembeschreibung, wird man dir nicht helfen können...

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Nie behaupt, dass es nicht geht ....

          Tabellen
          TUser
          ID Name Vorname
          1 Mueller Bernd
          2 Maier Chris

          TAufgabe
          ID Aufgabe Amt
          1 Aufräumen 1
          2 Putzen 1
          3 Chef 0
          3 Organisation 0

          TUserAufgabe
          IDUser IDAufgabe
          1 2
          1 3
          2 1

          DropDown Aufgabe
          PHP-Code:
          # SELECT ID,Aufgabe FROM TAufgabe WHERE Amt=0
          <select size="5" multiple="multiple" name="AufgabeID[]">
          <?php
          while($row mysql_fetch_assoc($result)) 
          {  
          $Aufgabe=$row['Aufgabe'];
          $ID=$row['ID'];
          echo 
          "<option value=$ID>$Aufgabe";
           }
          echo 
          "</select>";
          ?>
          DropDown Aufgabe-Amt
          PHP-Code:
          # SELECT ID,Aufgabe FROM TAufgabe WHERE Amt=1
          <select size="5" multiple="multiple" name="AufgabeAmtID[]">
          <?php
          while($row mysql_fetch_assoc($result)) 
          {  
          $Aufgabe=$row['Aufgabe'];
          $ID=$row['ID'];
          echo 
          "<option value=$ID>$Aufgabe";
           }
          echo 
          "</select>";
          ?>
          Kommt man damit besser klar?

          Kommentar


          • #6
            OR statt AND müßte helfen, IDAufgabe kann schließlich nur einen Wert auf einmal haben.

            Kommentar


            • #7
              Nein, ein OR liefert mir die User die z.B. Aufgabe 23 ODER 68 haben. Ich möchte aber die die User ausgeben die die Aufgabe 68 UND 23 haben....

              Kommentar


              • #8
                Zeig uns doch mal die ganze Query!
                und gibt es derzeit überhaupt jemanden der beide Aufgaben hat?

                Kommentar


                • #9
                  Ja, ich hab beide Aufgaben zugeordnet
                  PHP-Code:
                  SELECT FROM TUser pro INNER JOIN 
                  TUserAufgaben ref ON ref
                  .IDUser pro.ID WHERE (IDAufgabe IN(68) OR IDAufgabe IN(23)) 

                  Kommentar


                  • #10
                    versuch mal
                    PHP-Code:
                    SELECT FROM TUser pro INNER JOIN 
                    TUserAufgaben ref ON 
                    (ref.IDUser pro.IDWHERE (IDAufgabe IN(68) AND IDAufgabe IN(23)) GROUP BY pro.ID 
                    Was kommt denn eigentlich bei deiner Abfrage raus?

                    Kommentar


                    • #11
                      Nein, kein Ergebnis. Hab es nochmal geprüft. Die Daten 68 & 23 stimmen...

                      Kommentar


                      • #12
                        Ich hab kgrad eine Zeit, das ganze zu überblicken, aber soweit ich es sehe, kann ein Feld nicht gleichzeitig 60 und 23 sein und deswegen muß die Abfrage ins Leere laufen.

                        Kommentar


                        • #13
                          pack einfach alle ids ins erste IN und mach GROUP BY pro.ID
                          EDIT:
                          totaler Schwachsinn, dann haben wir ja wieder OR,sry

                          Kommentar


                          • #14
                            Du musst zwei JOINS auf die Aufgabentabelle machen.
                            Einmal mit WHERE Aufgaben_id = 68 und einmal mit WHERE Aufgaben_id = 23, so wie pekka schon schrieb, eine Spalte kann nur einen Wert gleichzeitig haben und ein normaler Query untersucht nur eine Zeile gleichzeitig. Um also einen weiteren Datensatz in die aktuelle "Überprüfung" zu bringen, musst du joinen.

                            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                            Wie man Fragen richtig stellt

                            Kommentar

                            Lädt...
                            X