berd: Mehrere Positionen in einer Spalten abfragen

Hallo zusammen,

in mysql 5.0.32 habe folgendes Problem, in der Tabelle "myTab1" sind folgende Spalten:

  • id, wird laufend vom System vergeben
  • eigen_id, dort werden Werte (intiger) gespeichert von einer Webseite, sie kommen in der Spalte nur ein Mal vor.
  • value0, beliebige Texte, die der User eingibt.

Tabellen Bsp.

  
id eigen_id value0  
1 4  text1  
2 3  text11  
3 12  text---  
4 6  text66b  
5 40  text_text  
5 1  textAA  

In der Webseite kann ein User über Checkbox nach Inhalten suchen die in der Tabelle "myTab1" vorhanden sind, der value des Checkbox ist der Wert in der Spalte "eigen_id".

Es kommt öffter vor das mehrere Checkboxs angeklickt sind und es sollen nur die Inhalte aus der Spalte "value0" angezeigt werden, deren Werte über die Checkbox angeklickt worden sind.
Wie kann ich das lösen?

Selber habe ich versucht mit "eigen_id IN (4, 3, 40)" aber es funktioniert wie "OR" was ist nicht der Sinn der Sache, denn ich möchte nicht nur die die Werte haben wenn ein Wert vorkommt sondern es muss die Bedingung erfühlt werden, dass es nur die Werte angezeigt werden sollen, die der User angeklickt hat.

grüße berd

  1. hi,

    Selber habe ich versucht mit "eigen_id IN (4, 3, 40)" aber es funktioniert wie "OR" was ist nicht der Sinn der Sache,

    Was denn sonst?

    Wenn der Nutzer die Checkboxen 3, 4 und 40 markiert hat, dann willst du doch wohl die Datensätze mit den Eigen-IDs 3, 4 oder 40 haben - oder etwa nicht?

    denn ich möchte nicht nur die die Werte haben wenn ein Wert vorkommt sondern es muss die Bedingung erfühlt werden, dass es nur die Werte angezeigt werden sollen, die der User angeklickt hat.

    Deine Orthographie und Ausdrucksweise  macht es ziemlich schwierig zu verstehen, was du eigentlich willst. Geht das vielleicht noch mal etwas strukturierter?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi,

    du möchtest dann vielleicht lieber eine "AND" Verknüpfung vornehmen?

    Könntest du dein Problem nochmal etwas ausführlicher beschreiben, es liest sich immer noch sehr kryptisch. Z.b. in der folgenden Form:

    • Datenbeispiel (hast du ja schon getan, aber der vollständigkeit halbe r kannst du es dann bitte nochmal wiederholen)
    • Eingabewerte
    • gewünschtes Ergebnis
    • nicht gewünschtes Ergebnis

    Das ist z.b. eine Checkbox im übertragenen Sinne
    [ ] Wert 3
    [X] Wert 4
    [ ] Wert 0815

    Danke,
    Frank

    1. Hallo,

      ja mache und Entschuldigung, für die Ausdrucks weise, ich bin unter Druck.

      "du möchtest dann vielleicht lieber eine "AND" Verknüpfung vornehmen?"
      Falls das gehen würden, würde ich gerne erfahren wie.

      • Eingabewerte, die Eingabe geschieht auf eine anderes Seite, falls Du das meinst.
      • gewünschtes Ergebnis:
        Klickt der User auf der Seite die Boxen 4, 3, 40 soll die Query folgende Werte liefern

      text1, text11, text_text und nichts anders.

      "Das ist z.b. eine Checkbox im übertragenen Sinne", ich erweitere sie um mein Bsp.
      [X] Wert 4
      [x] Wert 3
      [ ] Wert 12
      [ ] Wert 6
      [X] Wert 40
      [ ] Wert 1

      Es sind nur die Checkbox angeklickt worden, die die Werte 4, 3, 40 haben

      Danke berd

      1. Moin!

        Klickt der User auf der Seite die Boxen 4, 3, 40 soll die Query folgende Werte liefern

        text1, text11, text_text und nichts anders.

        Genau das geht aber nicht mit AND, sondern nur mir OR - bzw. eben IN.

        SELECT wasauchimmer FROM tabelle WHERE eigen_id IN (4, 3, 40);

        Das ergibt bei deiner Datenstruktur dann drei Datensätze, die du auslesen und entsprechend deinen Wünschen behandeln mußt.

        Mußt halt die Werte in IN dynamisch zusammensetzen - und daber bitte nicht vergessen, streng zu prüfen, ob du da tatsächlich Integer-Werte reinsetzt, oder ob ein böser Angreifer dir evtl. SQL-Injection unterjubeln will!

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. hallo,

          Klickt der User auf der Seite die Boxen 4, 3, 40 soll die Query folgende Werte liefern

          text1, text11, text_text und nichts anders.

          Genau das geht aber nicht mit AND, sondern nur mir OR - bzw. eben IN.

          SELECT wasauchimmer FROM tabelle WHERE eigen_id IN (4, 3, 40);

          Das habe ich auch schon versucht und mit dem Ergebnis wahr ich unzufrieden :-(
          Kann ich eventuell mit "unter Querys" arbeiten um das gewünschte Ergebnis doch noch "hinzu biegen"?

          grüße berd

          1. Hello,

            Kann ich eventuell mit "unter Querys" arbeiten um das gewünschte Ergebnis doch noch "hinzu biegen"?

            ja - sofern dein DBMS das mitspielt. Entweder mit Unterabfragen oder mit Joins. Im Archiv gabs mal von Vinzenz eines Lösung mit Joins, wenn ich mich recht erinnere, eine andere gibts von mir, aber die setzt voraus, dass du die Checkboxen eindeutig identifizieren kannst und die Anzahl der ausgewählten Werte kennst. Dann geht das schematisch etwa so:
            SELECT id
            FROM table
            WHERE eigen_id IN (4, 3, 40)
            GROUP BY id
            HAVING COUNT(*) = 3
                             ^^^ diese 3 entspricht der Anzahl der Kriterien im IN
            -> Erläuterung der Funktionsweise:

            1. Suche mir alle Sätze, auf die eine der Checkboxen zutrifft.
            2. fasse mir alle Sätze mit gleicher ID zusammen
            3. gib mir davon nur diejenigen, die eine Zusammenfassung von 3 Treffern sind.

            MfG
            Rouven

            --
            -------------------
            Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
          2. Moin!

            hallo,

            Klickt der User auf der Seite die Boxen 4, 3, 40 soll die Query folgende Werte liefern

            text1, text11, text_text und nichts anders.

            Genau das geht aber nicht mit AND, sondern nur mir OR - bzw. eben IN.

            SELECT wasauchimmer FROM tabelle WHERE eigen_id IN (4, 3, 40);

            Das habe ich auch schon versucht und mit dem Ergebnis wahr ich unzufrieden :-(

            Wie schon erwähnt: Zeige deine Datentabelle (beispielhaft), und zeige deine gewünschte Ergebnistabelle. Nur dann kann man dir einen passenden Query basteln.

            Kann mir aber eigentlich nicht vorstellen, dass man mit der passenden Textausgabe NICHT das hinkriegt, was du willst.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."