[MySQL 3.23.X] Abfrage über mehrere Tabellen

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

  • [MySQL 3.23.X] Abfrage über mehrere Tabellen

    ok nun zum 3. mal (args)... ich hab beim suchen nix passendes gefunden dass ich haette umschreiben koennen oder ich bin nicht durchgestiegen, daher frag ich einfahc mal:

    ich hab folgende beiden tabellen mit folgenden feldern:

    tabelle1:
    id
    voting


    tabelle2:
    id
    userid
    voterid


    nun will ich eine abfrage, die mir NUR die id's aus tabelle1 liefert, bei denen das feld voting == 1 ist UND deren id != userid aus tabelle2 ist bei der wiederum voterid == $_SESSION['userid'] ist... phuu... jemand verstanden? ich hoffe ja...

    danke schonmal

  • #2
    Code:
    SELECT t1.id
    FROM
      tabelle1 t1,
      tabelle2 t2
    WHERE
      t1.voting=1
      AND
      t1.id!=t2.userid
      AND
      t2.voterid=$_SESSION['userid']
    so?sieht doch gar nich so schwer aus oder? hab einfach deine drei beingungen der reihe nach hingeschrieben, gibt bestimmt noch optimierungspotenzial aber laufen sollte es
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      erstmal danke, aber so aehnlich ahtte ich es auch probiert, nur er liefert mir immer 0 ergebnisse obwohl in der tabelle2 noch gar keine eintraege sind, also beide AND-bedingungen erfuellt sind.... :/ ne idee?

      Kommentar


      • #4
        das is jetzt nich dein ernst oder?

        wenn in tabelle2 noch nix steht, wie in drei teufels namen soll es dann datensätze in tabelle2 geben, bei denen voterid dem wert $_SESSION['userid'] entspricht?

        evtl. wäre ne lektüre über JOIN ratsam (hier im forum und bei mysql.com)
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          nee moment...

          ich brauch die id's die ungleich userid sind aber wo voterid = $_SESSION['userid'] ist

          also sagen wir es gibt 3 eintraege:

          userid - voterid

          1 - 1
          2 - 1
          2 - 4

          session['userid'] = 1
          und in tabelle 1 gibt es 5 datensaetze mit den id's

          1
          2
          3
          4
          5

          dann brauch ich nur die id's die != der userid aus tabelle 2 sind, aber welche auch wiederrum die voterid (also session['userid']) 1 sind.. das waeren dann alle ausser 1 und 2... waere jetzt session['userid'] 4, duerfte nur 2 nicht angezeigt werden... das ist scheisse zu erklaeren deshlab dreh ich ja bald duch weil ich selbst nicht raff wie ich das machen soll...


          *edit*

          gut das waere dann eigentlich nur die letzte AND verknuepfung in klammer gesetzt, aber selbst wenn ich das mit der session weglasse geht es nicht, und dann ist es ja egal ob in der tabelle schon was steht ioder nicht, weil es in keinem falle zutrifft...
          Zuletzt geändert von Nocturn; 05.09.2003, 19:08.

          Kommentar


          • #6
            ich glaub es liegt schon an der abfrage selber, also hier mal meine abfrage:

            SELECT
            cars_users.id
            FROM
            cars_users,cars_votes
            WHERE
            cars_users.voting = '1'
            AND
            cars_users.id != cars_votes.userid
            AND
            cars_votes.voterid = '".$_SESSION['userid']."'


            aber selbst wenn ich nur mache:

            SELECT
            cars_users.id
            FROM
            cars_users,cars_votes
            WHERE
            cars_users.voting = '1'


            liefert er mir keine ergebnisse zurueck, da ist ja tabelle 2 garnicht mehr im spiel...

            Kommentar


            • #7
              wenn tabelle2 leer is gibt es auch keinen eintrag der ungleich der spalte id aus tabelle1 is oder?
              EDIT:
              was für spalten gibt es in der tabelle cars_users?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                hmm ich dachte das ist dann einfach NULL ... ok dann mach ich mal den ersten eintrag und dann sehn wir weiter...

                Kommentar


                • #9
                  also ich bekomm es nicht hin, hier dann mal meine bedingung die ich zu erfuellen versuche, vllt hat jemand ne idee...

                  ich habe tabelle1 in der die ganzen id's der user drinstehen, deren bilder man bewerten soll

                  dann habe ich tabelle2 in der drinsteht, welcher user bereits welches bild bewertet hat und mit welcher bewertung (was aber nicht so wichtig ist fuers grundprinzip)

                  ich will nun nur die bilder angezeigt bekommen (das wird dann ncoh per rand() funktion auf 1 bild begrenzt) fuer die ein bestimmter user schon gevotet hat, dass also jeder benutzer nur einmal jedes bild bewerten kann...

                  irgendwelche ideen? tabellen umstruktorieren? irgend was anderes? ich dreh noch durch

                  danke schonmal

                  Kommentar


                  • #10
                    in tabelle2 steht welcher user welches bild wie bewertet hat?

                    du willst rausfinden welche bilder ein user schon bewertet hat?

                    dann brauchst du doch nur tabelle2

                    oder willst du die bilder rausfinden, die einuser noch nicht bewertet hat?
                    dann wäre es evtl. vorteilhaft zu wissen, wo du die daten über die bilder speicherst (tabelle)
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      ich will die bilder aus tabelle 1 auswaehlen, die der user der gerade eingeloggt ist noch nicht bewertet hat... userid aus tabelle 2 und id aus tabelle 1 sind dabei identisch... der user wird per session['userid'] identifiziert und der user der bewertet hat steht unter voterid in tabelle 2....


                      *edit*

                      die dateinamen der bilder sind gleich der userid bzw. id aus tabelle eins... das ist also nicht das problem... wen ich die entsprechenden zeilen per limit und rand() auf eine verringerrt hab brauch ich grad noch das ergebnis + .jpg machen um das bild anzuzeigen...

                      ich muss das echt dringend langsam mal hinbekommen, nur ich will nicht meinen ganzen code im forum posten, wenn also jetzt das nicht moeglich ist das hier zu loesen, vielleicht kann ich es wem per email schicken oder so...
                      Zuletzt geändert von Nocturn; 05.09.2003, 20:07.

                      Kommentar


                      • #12
                        entscheid dich doch mal:
                        ich habe tabelle1 in der die ganzen id's der user drinstehen, deren bilder man bewerten soll
                        die dateinamen der bilder sind gleich der userid bzw. id aus tabelle eins
                        mach doch einfach mal für jede tabelle die du hast
                        Code:
                        DESC tabellenname
                        und poste das ergebnis

                        dann sagst du noch was in den tabellen steht und wie du die tabellen verknüpfst
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          wie gesagt:

                          tabelle1:

                          id (userid)
                          und weitere informationen vom user wie icq etc...



                          tabelle2:
                          userid (entpricht der id aus tabelle1)
                          voterid (id des benutzers der gevotet hat)


                          nun will ich alle id's von tabelle1, die von dem entsprechenden user (der per sessions identifiziert wird und in tabelle2 unter voterid eingetragen ist) noch NICHT bewertet wurden....

                          Kommentar


                          • #14
                            tabelle1.id is die id eines users?
                            tabelle2.userid is die id eines users?
                            tabelle2.voterid is die id eines users?

                            ich versteh deine tabellenstruktur zwar nicht so ganz (außer du bewertest user und nicht bilder wie du oben geschrieben hast), aber so sollte es gehen
                            Code:
                            SELECT t1.id
                            FROM tabelle1 t1
                              LEFT OUTER JOIN tabelle2 t2 
                              ON 
                                t1.id=t2.userid 
                                AND 
                                t2.voterid=$_SESSION['userid']
                            WHERE t2.userid IS NULL
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              hehe krass, ich hab zwar keine ahnung wieso, aber es funktioniert... vielleicht sollte ich mir mal die beschreibung der befehle durchlesen... BIG THX jedenfalls....

                              Kommentar

                              Lädt...
                              X