Thomas: MySQL: Problem bei SELECT, WHERE und AND

Hallo.

Also ich hab da ein Problem.
Ich möchte Datensätze aus einer Tabelle lesen und diese mit der WHERE-Klausel einschränken.

Meine Tabelle

id layoutnr fid_wert
3  lay3     40
4  lay4     40
4  lay4     7

Meine SQL Abfrage

SELECT DISTINCT ...
...
WHERE fid_wert=7 AND
WHERE fid_wert=40

Das funktioniert natürlich nicht weil der Wert 40 und 7 nicht in einer Zeile stehen.

Wenn ich die beiden Werte abfrage möchte ich als Ergebnis die ID bei der die beiden Werte zugeordnet sind.

Also in diesem Fall sollte nur 4 dastehen.

Hoffentlich hab ich mich jetzt verständlich ausgedrückt

Kann mir bitte bitte jemand helfen?

Besten Dank
und schöne Grüße

  1. Kann mir bitte bitte jemand helfen?

    Moin..
    Also Du formulierst Bedingungen:
    D.h. Du willst die Werte haben in denen 7 _oder_ 40 enthalten Sind. Damit alle beiden Werte erscheinen..
    Also verwendest Du OR...

    TomIRL

    1. Hallo TomIRL

      Nein OR kann ich nicht verwenden weil dann bekomme ich als Ergebnis 3, 4, 4

      Ich möchte aber als Ergebnis die ID wo sich beiden Bedingungen ergeben!

      Also gewünschtes Ergebnis wäre 4

  2. meinte so:
    funktioniert trotzdem nicht

    Meine SQL Abfrage

    SELECT DISTINCT ...
    ...
    WHERE fid_wert=7
    AND fid_wert=40

  3. yo,

    mein erster gedanke war, deine tabelle sieht "schräk" aus, vielleicht sollte man zuerst einmal da an dem datenbank-design feilen. das ist aber mehr ein gefühl und beruht weniger auf fakten.

    SELECT DISTINCT ...
    ...
    WHERE fid_wert=7 AND
    WHERE fid_wert=40

    dort ist schon einmal ein sytaktischer fehler, wenn es eine abfrage sein soll. zweimal die where klausel geht nicht.

    WHERE fid_wert=7 AND fid_wert=40

    Das funktioniert natürlich nicht weil der Wert 40 und 7 nicht in einer Zeile stehen.

    ok, wenn ich mal deine andere antwort mit einbeziehe, dann willst du, dass durch die abfrage sich mehr als ein datensatz auf die auswahl herangezogen wird. das ist nicht ganz trivial, aber wo ein wille ist, ist auch ein weg. es gibt sicherlich viele möglichkeiten, eine davon ist ein selfjoin, vorrausgesetzt, es bleibt zwei bei datensätze, aud die du dich gleichzeitig berufen willst.

    SELECT DISTINCT id
    FROM tabelle AS tab1, tabelle AS tab2
    WHERE tab1.fid_wert = 7 AND tab2.fid_wert = 40;

    Ilja

    1. hi,

      dort ist schon einmal ein sytaktischer fehler, wenn es eine abfrage sein soll. zweimal die where klausel geht nicht.

      hier https://forum.selfhtml.org/?t=87200&m=517837 richtiggestellt - eine stunde vor deiner antwort ;-)

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you can _think_ about them, before you break 'em."
      1. yo ihr beiden,

        bezüglich meiner schlampigen rechtschreibung, gedankengänge und meine faulheit alle beiträge gründlich durchzulesen, bevor ich meinen mund aufmache, gibt es nur ein urteil -> schuldig !

        vielleicht kann ich ja um ein mildes urteil betteln und ein teil der schuld meiner nicht_mehr_ganz_so_guten tastatur zuschieben, um aus der verantwortung zu stehlen. ;-)

        Ilja

        1. hi,

          bezüglich meiner schlampigen rechtschreibung, gedankengänge und meine faulheit alle beiträge gründlich durchzulesen, bevor ich meinen mund aufmache, gibt es nur ein urteil -> schuldig !

          selbsterkenntnis ist ...

          :-) aber wem wäre das nicht schon mal passiert.

          vielleicht kann ich ja um ein mildes urteil betteln und ein teil der schuld meiner nicht_mehr_ganz_so_guten tastatur zuschieben, um aus der verantwortung zu stehlen. ;-)

          dein posting enthielt ja darüber hinaus noch weitere gedankengänge zum _eigentlichen_ problem - das entschuldigt in ausreichendem maße.

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you can _think_ about them, before you break 'em."
        2. Hallo!

          yo ihr beiden,

          bezüglich meiner schlampigen rechtschreibung, gedankengänge und meine faulheit alle beiträge gründlich durchzulesen, bevor ich meinen mund aufmache, gibt es nur ein urteil -> schuldig !

          vielleicht kann ich ja um ein mildes urteil betteln und ein teil der schuld meiner nicht_mehr_ganz_so_guten tastatur zuschieben, um aus der verantwortung zu stehlen. ;-)

          Pfff! Ich habe gestern

          es gibt sicherlich viele möglichkeiten, eine davon ist ein selfjoin, vorrausgesetzt, es bleibt zwei bei datensätze, aud die du dich gleichzeitig berufen willst.

          wirklich nicht kapiert. Das war kein anklagender Hinweis, vielmehr eine Bitte. Aber nach dem Überschlafen glaube ich 'es zu haben': ... es bleibt bei zwei Datenfelder, ...

          Danke Ilja,
          Viennamade

          1. yo,

            habe mich auch mehr selber auf die schippe genommen.

            Aber nach dem Überschlafen glaube ich 'es zu haben': ... es bleibt bei zwei Datenfelder, ...

            hat den der selfjoin funktioniert ?

            Ilja

            1. Hallo Ilja!

              hat den der selfjoin funktioniert ?

              Äh, keine Ahnung. Ich bin nicht der Fragesteller, habe nur gelauscht und gefragt, weil ich weiß: Irgendwann kommt so ein Selfjoin auf mich zu.

              Beste Grüße
              Viennamade

              1. uuhmm, war wohl zu spät für mich und vielleicht war auch das letzte bier schlecht.....

                Ilja

    2. Hallo Ilja!

      Ich habe aufmerksam Dein Posting gelesen, eine Bitte dazu:

      ok, wenn ich mal deine andere antwort mit einbeziehe, dann willst du, dass durch die abfrage sich mehr als ein datensatz auf die auswahl herangezogen wird. das ist nicht ganz trivial, aber wo ein wille ist, ist auch ein weg. es gibt sicherlich viele möglichkeiten, eine davon ist ein selfjoin, vorrausgesetzt, *** es bleibt zwei bei datensätze ***, aud die du dich gleichzeitig berufen willst.

      Zwischen den Sternderln, dieser Nebensatz kann nicht stimmen. Bitte korrigiere ihn, sitze jetzt schon ein paar Minuten vor dem Satz ;-)

      SELECT DISTINCT id
      FROM tabelle AS tab1, tabelle AS tab2
      WHERE tab1.fid_wert = 7 AND tab2.fid_wert = 40;

      Herzlichen Dank
      Viennamade

  4. Hallo!

    SELECT DISTINCT ...
    ...
    WHERE fid_wert=7 AND
    WHERE fid_wert=40

    Die WHERE ... AND ... Abfrage bezieht sich auf einen Datensatz, d.h. es wird nach einer _Zeile_ gesucht, die sowohl ein Feld fid_wert mit dem Wert 7 und eine Feld fid_wert (also das gleiche!) mit dem Wert 40 hat.

    Du siehst, deine Abfrage kann also kein vernünftiges Ergebnis liefern.

    Iljas Vorschlag konnte ich noch nicht ansehen, aber vielleicht ist das hier auch eine Alternative:

    Je eine Abfrage für jeden fid_wert machen, Ergebnisse in zwei separaten arrays speichern.

    Dann mittels array_intersect() die gleichen IDs raussuchen.

    Gruß

    Matthias

    --
    ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
    http://www.makaio.de/quotations
  5. Hallo,

    Meine Tabelle

    id layoutnr fid_wert
    3  lay3     40
    4  lay4     40
    4  lay4     7

    Warum heißt die Spalte id, wenn es keine ID ist? Eine ID ist _eindeutig_.

    Also in diesem Fall sollte nur 4 dastehen.

    Das wird in einer SQL-Abfrage nur mit Subselects gehen.

    SELECT id
    FROM Tabelle
    WHERE id IN (SELECT id FROM Tabelle WHERE fid_wert=40) AND fid_wert=7;

    viele Grüße

    Axel