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

  • odysseusdg
    hat ein Thema erstellt MySQL such anfrage.

    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

  • odysseusdg
    antwortet
    jep danke funzt

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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...

    Einen Kommentar schreiben:


  • odysseusdg
    antwortet
    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'"

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • odysseusdg
    antwortet
    die punkte und die anzahl kann über php ermittelt werden

    Einen Kommentar schreiben:


  • odysseusdg
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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

    Einen Kommentar schreiben:


  • odysseusdg
    antwortet
    ok sieht schon mal ganz gut aus
    was ist array_agg?

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von akretschmer Beitrag anzeigen

    So?
    Man sollte die Arrays besser nicht direkt vergleichen, sondern auf CONTAINS prüfen. Das noch als Nachtrag.

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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?

    Einen Kommentar schreiben:


  • odysseusdg
    antwortet
    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

    Einen Kommentar schreiben:


  • VPh
    antwortet
    Stichwort: join

    Wir sind kein Codelieferservice :/

    Einen Kommentar schreiben:

Lädt...
X