Schöner Select

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

  • Schöner Select

    Hey Leutz,

    wollte mal nachhören, ob jemand eine Idee hat Folgendes über einen schönen Query zu lösen:

    Ich habe eine Tabelle mit zwei Feldern: user und show
    user gibt die userid wieder und show ist ein Wert, welcher von 0-4 gehen kann. Jeder User kann in der Tabelle mehrmals vorkommen - auch mit dem gleichen Show-Wert. Ich möchte mit einem Query jetzt folgendes ausgegeben bekommen.

    user(group by oder distinct/ einmalig anzeigen) | count(alle shows zählen, die den Wert 1 haben) | count(alle mit show=2) | count(alle mit show=3) | count(alle mit show=4)

    Das ganze sollte nur über einen Query und nicht über PHP laufen. Idealerweise müsste ich die Datenbankstruktur umstellen, aber das möchte ich nicht, weil das System so bereits bestens rennt.

    Wäre super wenn einer eine Lösung hätte.

    Ciao
    Benny

  • #2
    Re: Schöner Select

    Einfach gesagt: Geht nicht.
    Du kannst nicht mit WHERE selecten, gleichzeitig danach GROUP BYen und COUNTen, geht halt einfach nicht...
    Wenn für jeden Show-Wert einen Query
    SELECT COUNT(*) FROM tabelle WHERE show = 0 GROUP BY user_id;
    SELECT COUNT(*) FROM tabelle WHERE show = 1 GROUP BY user_id;
    SELECT COUNT(*) FROM tabelle WHERE show = 2 GROUP BY user_id;
    SELECT COUNT(*) FROM tabelle WHERE show = 3 GROUP BY user_id;
    SELECT COUNT(*) FROM tabelle WHERE show = 4 GROUP BY user_id;

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      kannst du nochmal genau beschreiben was du abfragen willst? kann es sein das eine dieser beiden abfragen dein Problem löst?

      Code:
      Vorschlag 1:
      SELECT user_id,
        ( SELECT COUNT(*) FROM test AS t0 WHERE t0.show=0 AND test.user_id=t0.user_id ) AS COUNT_0,
        ( SELECT COUNT(*) FROM test AS t1 WHERE t1.show=1 AND test.user_id=t1.user_id ) AS COUNT_1,
        ( SELECT COUNT(*) FROM test AS t2 WHERE t2.show=2 AND test.user_id=t2.user_id ) AS COUNT_2,
        ( SELECT COUNT(*) FROM test AS t3 WHERE t3.show=3 AND test.user_id=t3.user_id ) AS COUNT_3,
        ( SELECT COUNT(*) FROM test AS t4 WHERE t4.show=4 AND test.user_id=t4.user_id ) AS COUNT_4
      FROM test GROUP BY user_id
      
      Vorschlag 2:
      SELECT user_id,
        ( SELECT COUNT(*) FROM test AS t0 WHERE t0.show=0 ) AS COUNT_0,
        ( SELECT COUNT(*) FROM test AS t1 WHERE t1.show=1 ) AS COUNT_1,
        ( SELECT COUNT(*) FROM test AS t2 WHERE t2.show=2 ) AS COUNT_2,
        ( SELECT COUNT(*) FROM test AS t3 WHERE t3.show=3 ) AS COUNT_3,
        ( SELECT COUNT(*) FROM test AS t4 WHERE t4.show=4 ) AS COUNT_4
      FROM test GROUP BY user_id
      Ich vermute du warst auf der suche nach Vorschlag 1.

      Kommentar


      • #4
        Code:
        SELECT userid, SUM(IF(show = 1, 1, 0)) show1, SUM(IF(show = 2, 1, 0)) show2, ...
          FROM tabelle 
         GROUP BY user_id;
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar

        Lädt...
        X