[MySQL] Eine ID über mehrere Einträge finden

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

  • [MySQL] Eine ID über mehrere Einträge finden

    Moin,

    ich habe ein Problem, was sich derzeit nur schwer in die Überschrift packen lässt, daher nicht wundern Nun erstmal eine Klärung zu meiner situation: Ich habe folgende Tabelle

    Code:
    id     id_item     id_select
    1      1              2
    2      2              2
    3      1              4
    4      3              4
    5      1              1

    Nun gibt es ein formular mit 3 Pulldownmenüs wo der Benutzer über STRG mehrere Items auswählen kann. Diese werden dann über array_merge zusammengeführt und geben folgenden "ID-Poll".

    2,4 und 1. Nun möchte ich gerne ein SELECT-Statement erstellen, wodurch ich alle Items erhalte, die unter id_select 2,4 und 1 haben.

    In diesem Beispiel wäre das nur id_item 1.
    Jedoch kann ich über WHERE und AND nicht viel reißen, da ein Eintrag ja nie id_select 2, 4 und 1 gleichzeitig haben kann.

    Gibt es da eine möglichkeit so ein SELECT-Statement zu schreiben, ohne das ich 2 oder 3mal die Datenbank abfragen müsste?

  • #2
    wenn du statt dem AND ein OR verwendest, bekommst du alle datensätze, welche 4, 1 oder auch 2 in der spalte id_select enthalten.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Code:
      ... where id in(4,2,1)
      müsste auch gehen, sieht irgendwie bisschen übersichtlicher aus, je nach dem, was alles ausgewählt wird.

      ob's schneller ist, kann ich ad hoc nicht sagen, glaub aber schon.

      Kommentar


      • #4
        Original geschrieben von Abraxax
        wenn du statt dem AND ein OR verwendest, bekommst du alle datensätze, welche 4, 1 oder auch 2 in der spalte id_select enthalten.
        Es soll ja nicht das ausgewählt werden wo 4 oder 1 oder 2 sondern 4 UND 1 UND 2 vorhaden ist

        Kommentar


        • #5
          ja,

          wenn du haxes vorschlag noch etwas weiterdenkst, kommst du eventuell drauf .... alle auszuwählen, die x oder y oder z haben, dann auf der item-id zu gruppieren und dann zu schauen, bei welcher item-id die anzahl der in der jeweiligen gruppe gleich der anzahl deiner array-elemente ist.
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            davon abgesehen war mein post ein kleiner versuch deinem problem einer lösung zu geben. was deine beschreibung betrifft, so habe ich immer noch nicht verstanden, was du eigentlich willst.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Soo, habs nun einmal probiert:

              PHP-Code:
              SELECT COUNT(`id_item`) FROM `tabelleWHERE `id_selectin (4,2,1GROUP BY `id_item
              Ist wohl das, was ich benötige Nun versuche ich jedoch nur die Abfrage darauf zu beschränken, dass ich direkt die kriege, welche ich benötige.

              Meine erste Idee war sowas wie:

              PHP-Code:
              SELECT `id_item`, COUNT(`id_item`) AS `countFROM `tabelleWHERE `id_selectin (4,2,1) AND (`count` = '3'GROUP BY `id_item
              Klappt natürlich nun nicht Nun bin ich am überlegen wie ich das trotzdem regeln kann. Könnte es ggf. mit nem sub-select machen, was ich jedoch nicht möchte, da ich nicht weiß auf welches MySQL Version das ganze läuft.

              Ansonsten muss ich wirklich die Abfrage der counts in PHP machen

              Kommentar


              • #8
                PHP-Code:
                SELECT FROM tabelle WHERE id_select IN(4,2,1GROUP BY id_item LIMIT 3 

                Kommentar


                • #9
                  @onemorenerd: sicher?

                  @threadstarter: ich habe dir doch geschrieben, was zu tun ist .... wo ists problem? du mußt btw deine query eventuell dynamisch erzeugen, unter der annahme, daß du die zahl der gewählten items nicht kennst (hast dich im ersten post schlecht ausgedrückt).

                  was heißt
                  Klappt natürlich nun nicht
                  ?

                  das funktioniert in einer query, ich bin mir sicher (zu 99% ), ohne subselect.
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Original geschrieben von derHund
                    @onemorenerd: sicher?
                    Ich meinte folgendes:
                    PHP-Code:
                    $ids = array(1,2,4);
                    $sql 'SELECT * FROM tabelle WHERE id_select IN('.implode(', '$ids).') GROUP BY id_item LIMIT '.count($ids); 
                    Klappt nur, wenn jede Kombination aus id_item und id_select nur einmal vorkommt. Das muß natürlich im DB-Schema oder bei der Datenmanipulation berücksichtigt werden, aber ich habe den Thread so verstanden, das genau das der Fall ist.

                    Kommentar


                    • #11
                      Original geschrieben von derHund

                      @threadstarter: ich habe dir doch geschrieben, was zu tun ist .... wo ists problem? du mußt btw deine query eventuell dynamisch erzeugen, unter der annahme, daß du die zahl der gewählten items nicht kennst (hast dich im ersten post schlecht ausgedrückt).
                      Das ich das dynamisch erstellen muss, ist mir ja klar. Das ist auch nicht gerade das Problem wie ich finde

                      Das mit dem "das klappt natürlich nicht" bezog sich auf mein zweites statement und dies klappt auch wirklich nicht

                      Werde mal über das mit dem LIMIT nachdenken und testen - auf die Idee kam ich selbst nicht und konnte es auch aus den anderen Posts nicht rauslesen

                      Kommentar


                      • #12
                        Morgen, also das mit dem LIMIT 3 bringt nicht den gewünschten effekt. Dadurch wird nun nicht nur das mit COUNT = 3 ausgewählt sondern alle 3 - was nicht passieren soll.

                        Aber ich sortiere dann eben über PHP aus, geht ja auch. Danke euch allen

                        Kommentar


                        • #13
                          Code:
                          SELECT id_item, COUNT(*) counted
                          FROM test_table 
                          WHERE id_select in (4,2,1) 
                          GROUP BY id_item
                          HAVING counted = 3
                          klappt nicht?
                          Die Zeit hat ihre Kinder längst gefressen

                          Kommentar


                          • #14
                            peinlich

                            Sorry, having war mir neu.

                            Kommentar

                            Lädt...
                            X