Wie mache ich folgende Abfrage..

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

  • Wie mache ich folgende Abfrage..

    In einer Antrags-Tabelle habe ich die Spalten: AntragID(p), ProjektID, Status, UserID.


    Meine Bedingung:
    Gebe mir alle UserIDs, die:
    für das Projekt X einen Antrag gestellt haben, mit der Status = 'ok' UND
    für das Projekt Y einen Antrag gestellt haben, mit der Status = 'nok'


    Kann mir jemand mit der SQL Abrage helfen?

    Danke!
    Zuletzt geändert von brainwave8; 25.02.2007, 15:06.

  • #2
    Ansätze?

    Kommentar


    • #3
      PHP-Code:
      SELECT UserID WHERE (AntragID 'X' && Status 'ok') AND  (AntragID 'Y' && Status 'nok'
      http://dev.mysql.com/doc/refman/5.1/...ting-rows.html

      Kommentar


      • #4
        Ansatz:

        SELECT userid FROM request
        WHERE (projectid = 2 && state = 'ok')
        AND (project_id = 1 && state = 'nok')

        Bei der ersten Bedingung müßte ich 5 erhalten. Beim zweiten
        3 und 5. Somit muß ich bei beiden 5 bekommen da UND Bedingung.


        Klappt aber bei MS SQL nicht!
        Ist die Syntax bei MS SQL genauso wie bei MySQL?

        Folgende Fehlermeldung bekomme ich:
        Falsche Syntax in der Nähe von '&'.

        Kommentar


        • #5
          benutze AND.

          unlogisch ist dein bedingung aber trotzdem!

          Kommentar


          • #6
            AND liefert mir nichts zurück. Ich müßte aber '5' zurückbekommen.

            Wieso unlogisch?

            Kommentar


            • #7
              Original geschrieben von brainwave8
              Klappt aber bei MS SQL nicht!
              Ist die Syntax bei MS SQL genauso wie bei MySQL?
              Kann ich Dir leider nicht sagen, da ich mit MS SQL bisher noch nie was zu tun hatte.

              Hättest aber auch vorher sagen können dass Du mit MS SQL arbeitest.

              Kommentar


              • #8
                ok sorry

                hat sonst niemand ne idee?

                Kommentar


                • #9
                  AND liefert mir nichts zurück. Ich müßte aber '5' zurückbekommen.

                  Wieso unlogisch?
                  ach, vielleicht doch unlogisch? und deswegen 0 ergebnisse?

                  nenne mir bitte nur einen einzigen Datensatz, bei dem Die AntragID sowohl 1 als auch 2 ist.

                  Na, wie siehts aus mit der Logik?

                  Kommentar


                  • #10
                    von antragsid ist garnicht die rede!

                    Kommentar


                    • #11
                      von mir aus auch die projekt_id.

                      ich hatte die query von andi genommen, weil die im gegensatz zu deinen in code tags gepackt war und somit leichter zu lesen.

                      aber du scheinst es also grundlegend nicht zu verstehen, dass eine eigenschaft nicht zwei werte gleichzeitig haben kann.

                      Kommentar


                      • #12
                        also nochmal (beispiel):

                        antragid(pk) userid projectid state
                        ----------------------------------------------------------
                        0 5 2 ok
                        1 3 1 nok
                        2 5 1 nok
                        ...

                        wenn ich jetzt sage:

                        select userid from tab_antrag
                        where (projectid = 2 and state = 'ok')
                        and (projectid = 1 and state = 'nok')

                        dann will ich als ergebnis 5 zurück bekommen.


                        @TobiaZ
                        hast du es jetzt endlich verstanden?

                        Kommentar


                        • #13
                          hast du es jetzt endlich verstanden?
                          Jetzt halt bitte mal den ball flach. DU bist der jenige, der hier Hilfe erwartet.

                          Das geht so einfach nicht.

                          es gibt keinen datensatz, bei dem die projekt id sowohl "1" als auch "2 "ist, genauso wenig gibt es einen datensatz bei dem der status sowohl "ok" als auch "nok" ist.

                          Soweit ist das wohl logisch, oder?

                          also gibt es auch erst recht keinen DS der alle vier bedingungen erfüllt.

                          Auch logisch, oder?

                          Hast du jetzt verstanden, woran es scheitert?

                          wenn ja, dann können wir jetzt weiter arbeiten, wenn nein, dann versuche nochmal langsam es nachzuvollziehen.

                          ---

                          ich weiß nicht, was dein ziel ist. mein logischer verstand würde mir sowas empfehlen wie entweder (id2 und ok) ODER (id1 und nok)

                          und bevor du die uid doppelt bekommst: DISTINCT.

                          Kommentar


                          • #14
                            das war auch nur ein ansatz. das es nicht funktionier, habe ich ja selbst festgestellt.

                            nun zur logik:

                            (dein ansatz)
                            (id2 und ok) ODER (id1 und nok)

                            (mein logik)
                            (id2 und ok) UND (id1 und nok)

                            dh. der user muß! 2 anträge gestellt haben = 2 datensätze!
                            so, der eine datensatz muß die projektid=1 und dazu den status=nok
                            haben und der andere projektid=2 und status ok. erst dann kommt der user in frage. vielleicht könnte man diese bedingungen getrennt stellen. habe nur keine idee.

                            es muß doch eine "einfache" lösung geben?!

                            Kommentar


                            • #15
                              Dann musst du die Tabelle mit sich selbst joinen.

                              Kann mir aber nicht vorstellen, dass es keine sinnvollere lösung gibt. Beschreib mal bitte, was du letztendlich damit erreichen willst.

                              Kommentar

                              Lädt...
                              X