Aus einer Tabelle:
[tableold="head"]id|value|cat
1|1111|0
2|2222|1
3|3333|0
4|4444|1
5|5555|2
6|6666|2
7|7777|0
[/tableold]
Will ich alle Einträge, die kein (=0) cat haben, einzeln betrachten, alle mit cat>0 aber als Gruppe.
Und diese dann sortiert nach value bzw. SUM(value) ausgeben lassen, dabei dann zur Zuordnung id und cat dazu, wird halt je nach Fall 1er der beiden Werte ignoriert.
Ausgabe sollte also sein:
[tableold="head"]id|cat|value
5|2|12221
7|0|7777
2|1|6666
3|0|3333
1|0|1111
[/tableold]
Dabei die relevanten Werte fett markiert von id & cat.
Das bekomm ich zwar hin, aber relativ umständlich und nicht gerade sehr performant:
Index aufCode:( SELECT id, cat, SUM( value ) AS value FROM `test` WHERE cat >0 GROUP BY cat ORDER BY SUM( value ) DESC LIMIT 5 ) UNION ( SELECT id, cat, value FROM `test` WHERE cat =0 ORDER BY value DESC LIMIT 5 ) ORDER BY value DESC LIMIT 5
id (auto_increment)
cat
value
cat, value (cat_2)
Also erstmal (Ergebnisszeilen 1+3) die gruppierten, dann (Zeilen 2,4,5) alle ohne cat, und die beiden Ergebnisse zusammengefügt und nochmal nach value sortiert (und LIMIT)
Hat da jemand 'ne bessere/schnellere/einfachere Idee?
EXPLAIN....
Code:id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY test ALL cat,cat_2 NULL NULL NULL 7 Using where; Using temporary; Using filesort 2 UNION test ref cat,cat_2 cat_2 4 const 5 Using where NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort


 
			
			 
					
						 
					
						 
					
					
					
						 Zitieren
  Zitieren