2013-09-23 4 views
4

Je suis en train de modifier cette requête:Requête avec double groupe par?

SELECT (WEEKDAY(date) +1) dayofweek, COUNT(*) count 
FROM abanners 
WHERE iid = ? AND banner LIKE ? 
GROUP BY (WEEKDAY(date) +1) 
ORDER BY count DESC 

Avec cette requête, je reçois le nombre d'entrées DIVISEES par jour de la semaine, mais si je dois faire la même chose aussi par banner fente?

Je veux avoir:

banner1: entries splitted by day of week 
banner2: entries splitted by day of week 

ex: {"banner1" : "1,3,4,1,3,5,1", "banner2": "1,3,4,1,3,5,1"} 

Comment puis-je faire?

+0

Ajoutez simplement 'banner' à la fois à la liste' SELECT' et 'GROUP BY'. –

+0

De cette façon, il me donne: 'array ('dayofweek' => '1', 'COUNT (*)' => '4', 'count' => 'banner1')' – PurpleFoxy

+0

'bannière' doit précéder la jour de la semaine dans «GROUP BY». (De plus, vous pouvez simplement utiliser l'alias 'dayofweek' dans' GROUP BY' - vous n'avez pas besoin de l'expression complète dans MySQL comme vous le feriez avec SQL Server par exemple –

Répondre

4

Pour ce faire, il vous suffit d'ajouter banner à la liste SELECT et au GROUP BY. Cependant, il doit précéder l'expression dayofweek dans le GROUP BY.

SELECT 
    banner, 
    (WEEKDAY(date) +1) dayofweek, 
    COUNT(*) count 
FROM abanners 
WHERE 
    iid = ? 
    AND banner LIKE ? 
GROUP BY 
    banner, 
    dayofweek 
ORDER BY count DESC 

Notez que je l'ai utilisé l'alias dayofweek dans le GROUP BY ici. MySQL autorise les alias dans le GROUP BY où d'autres SGBDR signaleront une erreur.