2010-10-06 6 views
0

i ont 2 Tablemysql - php. Comment trouver

users : id , name 
order : id , price, user_id 

un utilisateur ont plus d'un ordre. Et je veux sélectionner un des utilisateurs

qui ont un prix total> 100. comment faire ?

EX: l'utilisateur John ont 3 commandes avec le prix: 30 $, 40 $, 50 $

SELECT * FROM user u 
INNER JOIN order o ON o.user_id = u.id 
WHERE sum(o.price) >100 

cette requête obtenir l'utilisateur est John? 30 + 40 + 50 = 110> 100 ?

Répondre

0
SELECT u.Id, Sum(o.price) FROM user u 
INNER JOIN order o ON o.user_id = u.id 
GROUP BY u.Id 
HAVING sum(o.price) > 100 
1

tout d'abord vous n'êtes pas autorisé à utiliser des fonctions d'agrégation (à savoir SUM) dans votre clause WHERE. Ils devraient être utilisés dans la clause HAVING. Pour calculer des agrégats, vous devez GROUP BY quelque chose, dans votre cas par u.id.

Alors:

SELECT * 
FROM user u 
INNER JOIN order o ON u.user_id = u.id 
GROUP BY u.id 
HAVING sum(o.price) > 100 

Notez que si vous avez besoin des utilisateurs sans ordre vous devez utiliser LEFT JOIN!

0

Merci pour toute réponse, mais je prends problème maintenant j'ai une nouvelle table order_file

users  : id , name 
order  : id , price, user_id 
order_file : id , file , order_id 
utilisateurs

, l'ordre est un nombre

ordre, order_file est un nombre

une utilisateur John ont 1 commande avec le prix est 200 $ et cette commande lien vers le fichier de commande avec deux enregistrement

SELECT * 
FROM user u 
INNER JOIN order o ON u.user_id = u.id 
INNER JOIN order_file of ON of.order_id = o.id 
WHERE u.name = 'John' 

nous aurons deux rows.Only valeur diff dans order_file

maintenant pour obtenir une fois que je l'utilise DISTINCT, et je reçois 1 rang

SELECT DISTINCT * 
FROM user u 
INNER JOIN order o ON u.user_id = u.id 
INNER JOIN order_file of ON of.order_id = o.id 
WHERE u.name = 'John' 

alors je ne SUM, oh la la, je reçois 400 $, pas 200 $

SELECT DISTINCT *, sum(o.price) 
    FROM user u 
    INNER JOIN order o ON u.user_id = u.id 
    INNER JOIN order_file of ON of.order_id = o.id 
    WHERE u.name = 'John' 

comment je peux obtenir extracty 200 $, sans ligne en double :(

+0

Vous devriez demander cela comme une question distincte. Et si les réponses existantes sont bonnes, vous devriez en accepter une. –

Questions connexes