Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL such anfrage

Einklappen

Neue Werbung 2019

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

  • MySQL such anfrage

    Hi Leute habe ein problem mit einer SQL abfrage. Ich habe zwei Tabellen die in einer n zu m Beziehung zueinander stehen und habe deshalb eine verküpfungstabele gemacht die die beiden verbindet
    Beispiel
    Tabele 1 unkt

    id / punkt
    1 / punkt_1
    2 / punkt_2
    3 / punkt_3

    Tabele 2 :name
    id / name
    1 / name_1
    2 / name_2

    Verknüpfungstabele punktname

    id / punktId / nameId
    1 / 1 / 1
    2 / 2 / 1
    3 / 3 / 1
    4 / 2 / 2
    5 / 3 / 2

    So nun zum Problem ich brauche eine SQL abfrage die mir aus der verknüpfungsdtabelle alle "nameId" ausgibt die die alle drei punktIds haben.
    das ergebniss der Abfrage wäre dementsprechent im Beispiel

    nameId = 1

    Danke schon mal im voraus

  • #2
    Stichwort: join

    Wir sind kein Codelieferservice :/
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      es geht nicht um den Code sondern um die logik dahinter habe es natürlich schon mit JOIN versucht was ich nicht rauskriege ist die art der verknüpfung

      zum beispiel wenn ich so joine

      Code:
      SELECT *
      FROM name JOIN punktname
      ON name.id = punktname.punktId
      WHERE punktname.punktId = 1 & punktname.punktId = 2 & punktname.punktId = 7
      GROUP BY uebungsId
      bekomme ich logischer weise kein ergebniss
      umgekehrt wenn ich mit || joine bekomme ich beide ergebnisse.
      ich stehe aufm schlauch

      Kommentar


      • #4
        Zitat von odysseusdg Beitrag anzeigen
        es geht nicht um den Code sondern um die logik dahinter habe es natürlich schon mit JOIN versucht was ich nicht rauskriege ist die art der verknüpfung

        zum beispiel wenn ich so joine

        Code:
        SELECT *
        FROM name JOIN punktname
        ON name.id = punktname.punktId
        WHERE punktname.punktId = 1 & punktname.punktId = 2 & punktname.punktId = 7
        GROUP BY uebungsId
        bekomme ich logischer weise kein ergebniss
        umgekehrt wenn ich mit || joine bekomme ich beide ergebnisse.
        ich stehe aufm schlauch
        Code:
        test=*# select * from name ;
         id | name
        ----+-------
          1 | name1
          2 | name2
        (2 rows)
        
        Time: 0,179 ms
        test=*# select * from punkt;
         id |  name
        ----+--------
          1 | punkt1
          2 | punkt2
          3 | punkt3
        (3 rows)
        
        Time: 0,159 ms
        test=*# select * from punktname ;
         id | punktid | nameid
        ----+---------+--------
          1 |       1 |      1
          2 |       2 |      1
          3 |       3 |      1
          4 |       2 |      2
          5 |       3 |      2
        (5 rows)
        
        Time: 0,162 ms
        test=*# select nameid from (select nameid, array_agg(punktid) as punkte from punktname group by nameid) foo where punkte = (select array_agg(id) from punkt);
         nameid
        --------
              1
        (1 row)
        So?
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von akretschmer Beitrag anzeigen

          So?
          Man sollte die Arrays besser nicht direkt vergleichen, sondern auf CONTAINS prüfen. Das noch als Nachtrag.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            ok sieht schon mal ganz gut aus
            was ist array_agg?

            Kommentar


            • #7
              Zitat von odysseusdg Beitrag anzeigen
              ok sieht schon mal ganz gut aus
              was ist array_agg?
              Eine Aggregatsfunktion. http://www.postgresql.org/docs/9.3/i...aggregate.html
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                sorry hätte ich erwähnen müssen dass meine datenbank mysql ist

                Kommentar


                • #9
                  ich könnte das problem über php regeln mit mehreren abfragen jedoch wäre das ziemlich unsauber

                  Kommentar


                  • #10
                    habs hingekriegt Danke für die anregungen

                    Code:
                    SELECT *,count(id) AS punkte
                    FROM punktname
                    WHERE  punktId IN (1,2,3)
                    GROUP BY nameId
                    HAVING punkte=3

                    Kommentar


                    • #11
                      die punkte und die anzahl kann über php ermittelt werden

                      Kommentar


                      • #12
                        Zitat von odysseusdg Beitrag anzeigen
                        habs hingekriegt Danke für die anregungen

                        Code:
                        SELECT *,count(id) AS punkte
                        FROM punktname
                        WHERE  punktId IN (1,2,3)
                        GROUP BY nameId
                        HAVING punkte=3
                        Das skaliert nicht. Kommen neue Punkte dazu, mußt Du das SQL anpassen.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          Code:
                          SELECT *,count(id) AS punkte
                          FROM punktname
                          WHERE  punktId IN (1,2,3)
                          GROUP BY nameId
                          HAVING punkte=3
                          klar das kann aber in php geschehen ich habe ja die punkte in einem array packe die stringausgabe des arrays in "IN(array_komma_getrent)"
                          und das array Count in " Punkte= 'arrayCount'"

                          Kommentar


                          • #14
                            Zitat von odysseusdg Beitrag anzeigen
                            Code:
                            SELECT *,count(id) AS punkte
                            FROM punktname
                            WHERE  punktId IN (1,2,3)
                            GROUP BY nameId
                            HAVING punkte=3
                            klar das kann aber in php geschehen ich habe ja die punkte in einem array packe die stringausgabe des arrays in "IN(array_komma_getrent)"
                            und das array Count in " Punkte= 'arrayCount'"
                            Code:
                            test=*# select nameid from (select nameid, count(punktid) as punkte from punktname group by nameid) foo inner join (select count(1) from punkt) bar on foo.punkte=bar.count;
                             nameid
                            --------
                                  1
                            (1 row)
                            Weil Du mir mit Deinem MySQL leid tust...
                            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                            Kommentar


                            • #15
                              jep danke funzt

                              Kommentar

                              Lädt...
                              X