mk: mysql select, abhängig von 2. tabelle

Hallo Leute,

was ist daran falsch:

"SELECT * FROM thisvote, thisfile WHERE thisfile.id_thisfile = thisvote.id_thisfile AND thisvote.id_thisuser <> ".$_SESSION["loginuser"]["id_thisuser"]." AND thisfile.id_thisuser = ".$_SESSION["loginuser"]["id_thisuser"]." ORDER BY thisvote.timestamp DESC"

:)

Ich möchte aus Tabelle A alle Einträge, die NICHT mit der LoginUserId übereinstimmen. ABER! Auch die, die in Tabelle A über id_thisfile in Tabelle B bei id_thisuser mit der LoginUserId übereinstimmt.

Tabelle A = thisvote
Tabelle B = thisfile

thisvote.id_thisvote
thisvote.id_thisuser
thisvote.id_thisfile

thisfile.id_thisfile
thisfile.id_thisuser

Wer hat das schonmal so gemacht?

mk

  1. "SELECT * FROM thisvote, thisfile

    Ich möchte aus Tabelle A alle Einträge, die NICHT mit der LoginUserId übereinstimmen. ABER! Auch die, die in Tabelle A über id_thisfile in Tabelle B bei id_thisuser mit der LoginUserId übereinstimmt.

    Vermutlich möchtest Du Ergebnismengen verschiedener SELECTs kombiniert ausgeben lassen mithilfe des Operators: JOIN

    1. "SELECT * FROM thisvote, thisfile

      Ich möchte aus Tabelle A alle Einträge, die NICHT mit der LoginUserId übereinstimmen. ABER! Auch die, die in Tabelle A über id_thisfile in Tabelle B bei id_thisuser mit der LoginUserId übereinstimmt.

      Vermutlich möchtest Du Ergebnismengen verschiedener SELECTs kombiniert ausgeben lassen mithilfe des Operators: JOIN

      UNION statt JOIN natürlich, sorry

      1. UNION statt JOIN natürlich, sorry

        Fehler: The used SELECT statements have a different number of columns.

        tjoa...

        naja, ich guck dann mal weiter.

        danke dennoch...

        1. UNION statt JOIN natürlich, sorry

          Fehler: The used SELECT statements have a different number of columns.

          Wenn Du zwei Datensatzmengen per UNION kombinierst, müssen oft Anzahl und Typ (abhängig vom verwendeten RDBMS) der abgefragten Datenfelder identisch sein:

          Beispiel:
          SELECT
           DF1,
           DF2
          FROM
           DT1
          UNION SELECT
           DF1,
           DF2
          FROM
           DT2

          1. Wenn Du zwei Datensatzmengen per UNION kombinierst, müssen oft Anzahl und Typ (abhängig vom verwendeten RDBMS) der abgefragten Datenfelder identisch sein:

            Bei mir müssen sie identisch sein.

            Bei mir sind die Felder leider nicht idendtisch:

            Tabelle A = thisvote
            Tabelle B = thisfile

            thisvote.id_thisvote
            thisvote.id_thisuser
            thisvote.id_thisfile

            thisfile.id_thisfile
            thisfile.id_thisuser

            Und ich denke, ich werde in der einen Tabelle kein "Extrawurstfeld" anlegen, damit ich diese Funktion nutzen kann... Da muss es mehrere Wege hin führen.

            Gibt UNION auch Datensätze aus der Tabelle B aus? Wenn ja, dann ist es das Falsche.

            1. Und ich denke, ich werde in der einen Tabelle kein "Extrawurstfeld" anlegen, damit ich diese Funktion nutzen kann... Da muss es mehrere Wege hin führen.

              SELECT
               '' as DF1,
               DF2
              FROM
               DT1
              UNION SELECT
               DF1
               DF2
              FROM
               DT2

              Gibt UNION auch Datensätze aus der Tabelle B aus? Wenn ja, dann ist es das Falsche.

              UNION ist geeignet mehrere Abfragen so zu sagen zu kombinieren. Ich hatte Dich so verstanden, dass Du die Ergebnismengen zweier Abfragen (die auf andere Tabellen "gehen") kombinieren willst.

              1. UNION ist geeignet mehrere Abfragen so zu sagen zu kombinieren. Ich hatte Dich so verstanden, dass Du die Ergebnismengen zweier Abfragen (die auf andere Tabellen "gehen") kombinieren willst.

                Ok. Die Variante '' as jenes werde ich mal ausprobieren.

                Wäre es dann diese Lösung?

                SELECT
                 id_vote,
                 id_file,
                 id_user

                FROM
                 vote

                UNION SELECT
                 '' as id_vote,
                 id_file,
                 id_user

                FROM
                 file

                ORDER BY
                 timestamp

                DESC

                Und wie geht es dann weiter? Wo schreibe ich die WHERE hin? Vor dem UNION? Es ist wie gesagt KEINE UND SELECT. Also ich will nicht dieses aus Tab A und jenes aus Tab B - sondern! > NUR etwas aus Tab A. Nämlich alles, wo die id_user nicht eine bestimmte ist und NUR alle die nimmt, die über id_file in file diese bestimmte Variable findet.

                Also:

                vote.id_user != variable
                file.id_file == vote.id_file
                file.id_user == variable

                Genau so. Ich will nur aus Tab A was bekommen.

                mk

                1. Wäre es dann diese Lösung?

                  SELECT
                  id_vote,
                  id_file,
                  id_user

                  FROM
                  vote

                  UNION SELECT
                  '' as id_vote,
                  id_file,
                  id_user

                  FROM
                  file

                  ORDER BY
                  timestamp

                  DESC

                  Sieht nicht schlecht aus.

                  Und wie geht es dann weiter? Wo schreibe ich die WHERE hin?

                  Wie gewohnt die WHEREs platzieren.

                  Genau so. Ich will nur aus Tab A was bekommen.

                  Vergiss UNION. ;)

                  Nimm JOIN. Schau ruhig mal in die MySQL-Onlinedoku. Da gibts tonnenweise Beispiele.

                  1. Vergiss UNION. ;)

                    Nimm JOIN.

                    *lol*

                    da fehlt ein apostroph und ein n - das wäre dann umgangssprachlich und bedeutet: Feierabend.

                    muchas gracias

                    oder wie sagt der bayer: schau'n'mer mal, dann sehn'mer scho'.

                    1. Vergiss UNION. ;)

                      Nimm JOIN.

                      *lol*

                      Sorry, ich hatte falsch geraten. :)

                      muchas gracias

                      Du könntest bei Deinen nächsten Fragen gleich am Anfang das Tabellendesign mitliefern. Zudem wäre es besser, wenn Du den tatsächlich generierten und an den Datenserver gesendeten SQLString postest statt den Programmcode. Solltest Du sowieso immer für Debugzwecke einbauen, so ein kleines "echo $SQLstring;". Und die SQLStrings immer schön strukturiert posten. Es gibt hier sogar ein Forums-Feature, dass dieses unterstützt.