[GastForen Programmierung/Entwicklung PHP und MySQL Grupieren von resultaten

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

24. Jun 2005, 16:07
Beitrag # 1 von 12
Bewertung:
(4124 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

Ich möchte die folgende SQL-Query umbauen, so dass die Resultate
absteigend nach dem Thema mit den meisten items sortiert wird:
Das ist die original Query:
Code
    SELECT  
ac_r_pk_id AS right_id,
ac_r_menu AS right_menu,
ac_r_name AS right_name,
ac_rt_pk_id AS topic_id,
ac_rt_name AS topic_name

FROM
ac_right,
ac_righttopic

WHERE
ac_rt_fk_id = ac_rt_pk_id

ORDER BY
ac_rt_name ASC,
ac_r_name ASC


Ich habe schon mal mit Count und Group BY gespielt, doch kahm ich auf keinen grünen Zweig.

ac_rt_name ist der Themaname
ac_rt_pk_id ist der Primary key vom Thema.

Jemand eine Idee?
X

Grupieren von resultaten

oesi50
  
Beiträge gesamt: 2315

24. Jun 2005, 16:26
Beitrag # 2 von 12
Beitrag ID: #174301
Bewertung:
(4117 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ich weiß nicht welche db-version du hast, aber im Allgemeinen geht es so:
Code
SELECT  
ac_r_pk_id AS right_id,
ac_r_menu AS right_menu,
ac_r_name AS right_name,
ac_rt_pk_id AS topic_id,
ac_rt_name AS topic_name,
count(*) AS anzahl

FROM ac_right, ac_righttopic

WHERE ac_rt_fk_id = ac_rt_pk_id

GROUP BY topic_id

ORDER BY anzahl DESC, ac_rt_name ASC, ac_r_name ASC



als Antwort auf: [#174298]
(Dieser Beitrag wurde von oesi50 am 24. Jun 2005, 16:27 geändert)

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

24. Jun 2005, 17:22
Beitrag # 3 von 12
Beitrag ID: #174308
Bewertung:
(4108 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

soweit war ich schon mal, das Problem ist nur, dass es nur ein Resultat
pro Thema ergibt, anstatt bis zu 16 (momentaner Stand).

Ich möchte erreichen, dass ich die selben Resultate bekomme, wie bei
der ersten Query aber zusätzlich absteigend nach der anzahl einträge pro Thema.
Es ist jetzt schon so sortiert, doch nur ein Resultat pro Thema.


als Antwort auf: [#174301]

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

24. Jun 2005, 17:38
Beitrag # 4 von 12
Beitrag ID: #174310
Bewertung:
(4106 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

Ich befürchte es geht nur mit einem subselect (am MySQL 4.1)...

In etwa so:
Code
    SELECT   
ac_r_pk_id AS right_id,
ac_r_menu AS right_menu,
ac_r_name AS right_name,
ac_rt_pk_id AS topic_id,
ac_rt_name AS topic_name,
(SELECT COUNT(ac_rt_fk_id) FROM ac_right WHERE ac_rt_fk_id = ac_rt_pk_id) AS anzahl

FROM
ac_right,
ac_righttopic

WHERE
ac_rt_fk_id = ac_rt_pk_id

ORDER BY
anzahl DESC,
ac_rt_name ASC,
ac_r_name ASC



als Antwort auf: [#174301]
(Dieser Beitrag wurde von Pozor am 24. Jun 2005, 18:26 geändert)

Grupieren von resultaten

oesi50
  
Beiträge gesamt: 2315

24. Jun 2005, 17:45
Beitrag # 5 von 12
Beitrag ID: #174312
Bewertung:
(4104 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
versuchs mal so:
Code
SELECT   
ac_r_pk_id AS right_id,
ac_r_menu AS right_menu,
ac_r_name AS right_name,
a.ac_rt_pk_id AS topic_id,
a.ac_rt_name AS topic_name,
count(b.ac_rt_pk_id) AS anzahl

FROM ac_right, ac_righttopic AS a, ac_righttopic AS b

WHERE ac_rt_fk_id = a.ac_rt_pk_id
AND a.ac_rt_pk_id = b.ac_rt_pk_id

GROUP BY b.ac_rt_pk_id

ORDER BY anzahl DESC, ac_rt_name ASC, ac_r_name ASC


habe ich allerdings nicht getestet.


als Antwort auf: [#174310]
(Dieser Beitrag wurde von oesi50 am 24. Jun 2005, 17:46 geändert)

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

24. Jun 2005, 18:20
Beitrag # 6 von 12
Beitrag ID: #174314
Bewertung:
(4096 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

es resultiert dasselbe.

Es kann nicht gehen mit GROUP BY. Es werden Gruppen gebildet und
nicht die einzelnen Resultate der Gruppe aufgeführt.


als Antwort auf: [#174312]

Grupieren von resultaten

oesi50
  
Beiträge gesamt: 2315

24. Jun 2005, 18:33
Beitrag # 7 von 12
Beitrag ID: #174316
Bewertung:
(4091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zeige mal die Datenbank(als dump), ich schau mal was sich machen lässt.


als Antwort auf: [#174314]

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

24. Jun 2005, 18:36
Beitrag # 8 von 12
Beitrag ID: #174317
Bewertung:
(4090 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mit der oben geposteten query gehts, ich brauch nur das Ganze mit
MySQL > 4.1.x laufen zu lassen.


als Antwort auf: [#174310]
(Dieser Beitrag wurde von Pozor am 24. Jun 2005, 18:37 geändert)

Grupieren von resultaten

oesi50
  
Beiträge gesamt: 2315

24. Jun 2005, 22:28
Beitrag # 9 von 12
Beitrag ID: #174334
Bewertung:
(4082 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Es kann nicht gehen mit GROUP BY. Es werden Gruppen gebildet und
nicht die einzelnen Resultate der Gruppe aufgeführt.


Das kann ich so nicht stehen lassen. Dein Subselect lässt sich auch mit SELF JOINs realisieren.


als Antwort auf: [#174316]

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

25. Jun 2005, 01:44
Beitrag # 10 von 12
Beitrag ID: #174341
Bewertung:
(4079 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

weisst du gerade wie? *lösungausdemärmelschüttel*


als Antwort auf: [#174334]

Grupieren von resultaten

oesi50
  
Beiträge gesamt: 2315

25. Jun 2005, 09:49
Beitrag # 11 von 12
Beitrag ID: #174349
Bewertung:
(4072 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ansatzweise so:

http://www.hilfdirselbst.ch/...i?post=174312#174312

gib mir mal einen dump, und ich schüttel.


als Antwort auf: [#174341]

Grupieren von resultaten

Pozor
Beiträge gesamt: 892

25. Jun 2005, 19:25
Beitrag # 12 von 12
Beitrag ID: #174387
Bewertung:
(4031 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

danke für den Anstoss in die richtige Richtung.
Es funktioniert nun mit einem SELF JOIN:

Code
SELECT  
a.ac_r_pk_id AS right_id,
a.ac_r_menu AS right_menu,
a.ac_r_name AS right_name,
ac_rt_pk_id AS topic_id,
ac_rt_name AS topic_name,
count(* ) AS anzahl

FROM
ac_right AS a,
ac_right AS b,
ac_righttopic

WHERE
a.ac_rt_fk_id = b.ac_rt_fk_id AND
a.ac_rt_fk_id = ac_rt_pk_id

GROUP BY
a.ac_r_pk_id

ORDER BY
anzahl DESC ,
ac_rt_name ASC ,
a.ac_r_name ASC



als Antwort auf: [#174349]
X