web-dev-qa-db-fra.com

Résultats du groupe MySQL par jour en utilisant timestamp

Je dois prendre la requête suivante et extraire le nombre total de commandes et la somme des commandes groupées par jour. Je stocke tout en utilisant des horodatages.

SELECT
    COUNT(id) as order_count,
    SUM(price + shipping_price) as order_sum,
    DAY(FROM_UNIXTIME(created)) as day
FROM `order`
WHERE '.implode(' AND ', $where).'

J'ai besoin de grouper par JOUR, mais lorsque je fais pour les ventes du week-end dernier, il prend mon nombre de commandes et le rend égal à 1 au lieu de 3. Comment puis-je extraire les valeurs ci-dessus groupées par jour?

REMARQUE: l'implode est utilisé UNIQUEMENT pour définir la période (WHERE created> = TIMESTAMP AND <= TIMESTAMP)

Mettre à jour

Sans GROUP BY day

Array ( 
    [order_count] => 3
    [order_sum] => 69.70
    [day] => 17
)

Avec GROUP BY day

Array ( 
    [order_count] => 1
    [order_sum] => 24.90
    [day] => 17
)

J'ai besoin de cette requête pour retourner chaque jour de vente, le nombre de commandes et la somme de ces ventes. Il me manque un morceau du puzzle ici quelque part ...

25
Webnet

Oubliez-vous simplement d'ajouter GROUP BY ... à la fin?

SELECT
    COUNT(id) as order_count,
    SUM(price + shipping_price) as order_sum,
    DAY(FROM_UNIXTIME(created)) as order_day
FROM `order`
WHERE '.implode(' AND ', $where).'
GROUP BY order_day

REMARQUE:

Vous ne pouvez pas utiliser as day pour votre colonne de jours car day est une fonction MySQL. Utilisez quelque chose comme order_day.

De licornes

Selon le commentaire de @OMG Unicorn, vous pouvez utiliser:

DAY(FROM_UNIXTIME(created)) as `day`

Tant que wrap day dans `backticks.

37
maček

Vous pouvez aussi simplement utiliser: 

SELECT 
COUNT( id ) AS order_count, 
SUM( price + shipping_price ) AS order_sum
FROM  `order` 
GROUP BY LEFT( timestamp, 10 ) 

ou même

GROUP BY SUBSTR (horodatage, 1, 10)

2
Claus Gammelgaard

Vous êtes probablement confronté à un conflit de noms entre DAY() (la fonction dans MySQL) et day (le nom de votre variable). Avez-vous essayé d'utiliser quelque chose qui ne sera pas en conflit, tel que order_day?

0
Jack M.