MYSQL Select
Résolu/Fermé
florent.perret.74
Messages postés
25
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
11 octobre 2012
-
14 sept. 2012 à 11:58
florent.perret.74 Messages postés 25 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 11 octobre 2012 - 1 oct. 2012 à 17:39
florent.perret.74 Messages postés 25 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 11 octobre 2012 - 1 oct. 2012 à 17:39
A voir également:
- Select * mysql
- Mysql community server - Télécharger - Bases de données
- Reboot and select proper boot device asus - Forum Matériel & Système
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
- Please select boot device - Forum Windows 7
- Reboot and select proper boot device or insert boot media in selected boot device and press a key ✓ - Forum Windows 10
6 réponses
laoshu
Messages postés
1231
Date d'inscription
mardi 7 juin 2011
Statut
Membre
Dernière intervention
24 mai 2015
350
28 sept. 2012 à 10:10
28 sept. 2012 à 10:10
Bonjour,
Ce n'est pas très propre, mais tu peux essayer ainsi (si tu n'as pas mieux):
SELECT cli_raison_sociale, dev_id_devis
FROM client c1 JOIN devis t1
WHERE t1.dev_id_client = c1.cli_id_client
ORDER BY cli_raison_sociale
Et faire une boucle php sur le résultat pour compter, en mettant le résultat dans une variable.
Et recommencer pour les commandes. Ça te fait 2 requêtes contre une attendue, mais je ne trouve pas mieux...
Ce n'est pas très propre, mais tu peux essayer ainsi (si tu n'as pas mieux):
SELECT cli_raison_sociale, dev_id_devis
FROM client c1 JOIN devis t1
WHERE t1.dev_id_client = c1.cli_id_client
ORDER BY cli_raison_sociale
Et faire une boucle php sur le résultat pour compter, en mettant le résultat dans une variable.
Et recommencer pour les commandes. Ça te fait 2 requêtes contre une attendue, mais je ne trouve pas mieux...
kalamit
Messages postés
279
Date d'inscription
samedi 10 juin 2006
Statut
Contributeur
Dernière intervention
29 juin 2016
16
14 sept. 2012 à 15:01
14 sept. 2012 à 15:01
Salut,
Effectivement, c'est une très mauvaise idées de faire des requêtes dans des boucles et un bon réflexe de tout réunir en une requête.
A quoi te sert ton select dans la table client du début sans condition where ?
Parce que pour moi, tu peux faire directement un :
SELECT count(dev_id_devis) as nb_devis FROM devis t1 GROUP BY cli_id_client
et idem sur les commandes...
Effectivement, c'est une très mauvaise idées de faire des requêtes dans des boucles et un bon réflexe de tout réunir en une requête.
A quoi te sert ton select dans la table client du début sans condition where ?
Parce que pour moi, tu peux faire directement un :
SELECT count(dev_id_devis) as nb_devis FROM devis t1 GROUP BY cli_id_client
et idem sur les commandes...
florent.perret.74
Messages postés
25
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
11 octobre 2012
27 sept. 2012 à 15:32
27 sept. 2012 à 15:32
Salut,
Désolé pour cette réponse ultra-tardive... :/ Alors la requête du début permet de lister tous les clients de la base de données avec leurs coordonnées respectives (N° tel, adresse, fax...) c'est une sorte d'annuaire. Et ensuite, pour un usage commercial, ils m'ont demandé de regrouper dans deux nouvelles colonnes le nombre de devis effectués pour le client ainsi que le nombre de commandes...
Désolé pour cette réponse ultra-tardive... :/ Alors la requête du début permet de lister tous les clients de la base de données avec leurs coordonnées respectives (N° tel, adresse, fax...) c'est une sorte d'annuaire. Et ensuite, pour un usage commercial, ils m'ont demandé de regrouper dans deux nouvelles colonnes le nombre de devis effectués pour le client ainsi que le nombre de commandes...
kalamit
Messages postés
279
Date d'inscription
samedi 10 juin 2006
Statut
Contributeur
Dernière intervention
29 juin 2016
16
27 sept. 2012 à 17:42
27 sept. 2012 à 17:42
Ok, je percute et je dirais :
SELECT cli_raison_sociale, COUNT(dev_id_devis) as nb_devis, COUNT(cmd_id_commande) as nb_commande
FROM client c1
LEFT OUTER JOIN devis t1 on t1.dev_id_client = c1.cli_id_client
LEFT OUTER JOIN commande t2 on t2.cmd_id_client = c1.cli_id_client
ORDER BY cli_raison_sociale
J'extrapole sur les id de jointure, étant donné que je n'ai pas la description de toutes les tables. Je dois pas être loin.
Bonne journée
SELECT cli_raison_sociale, COUNT(dev_id_devis) as nb_devis, COUNT(cmd_id_commande) as nb_commande
FROM client c1
LEFT OUTER JOIN devis t1 on t1.dev_id_client = c1.cli_id_client
LEFT OUTER JOIN commande t2 on t2.cmd_id_client = c1.cli_id_client
ORDER BY cli_raison_sociale
J'extrapole sur les id de jointure, étant donné que je n'ai pas la description de toutes les tables. Je dois pas être loin.
Bonne journée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
florent.perret.74
Messages postés
25
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
11 octobre 2012
28 sept. 2012 à 09:37
28 sept. 2012 à 09:37
En effet, vous n'êtes pas loin sur le sujet. Mais je n'ai pas l'impression que ça soit possible... En effet, lorsque j'exécute votre requête, il n'y a qu'une ligne :
- ce dernier me renvoie le total des devis dans la base et
- le total des commandes,
- Le premier client qu'il trouve...
Du coup le résultat n'est plus exploitable... Mais bon, ça n'est peut être pas possible ce que je demande... En tout cas merci beaucoup !
- ce dernier me renvoie le total des devis dans la base et
- le total des commandes,
- Le premier client qu'il trouve...
Du coup le résultat n'est plus exploitable... Mais bon, ça n'est peut être pas possible ce que je demande... En tout cas merci beaucoup !
florent.perret.74
Messages postés
25
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
11 octobre 2012
28 sept. 2012 à 10:37
28 sept. 2012 à 10:37
Du coup, c'est ce que j'ai fait... C'est pour ça que c'est un peu lourd mais au moins ils obtiennent le résultat qu'ils voulaient... L'autre idée n'était peut être pas réalisable... Merci beaucoup quand même !
kalamit
Messages postés
279
Date d'inscription
samedi 10 juin 2006
Statut
Contributeur
Dernière intervention
29 juin 2016
16
1 oct. 2012 à 14:38
1 oct. 2012 à 14:38
Si si l'autre idée est réalisable, c'est juste la jointure qui est inversée. Il faut certainement prendre le pb à l'envers.
Je te conseille tout de meme de revoir la requete, car ta solution de requete imbriquée est diffcilement viable dans le temps.
Je te conseille tout de meme de revoir la requete, car ta solution de requete imbriquée est diffcilement viable dans le temps.
florent.perret.74
Messages postés
25
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
11 octobre 2012
1 oct. 2012 à 15:02
1 oct. 2012 à 15:02
D'accord, merci du conseil :) !
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
1 oct. 2012 à 16:44
1 oct. 2012 à 16:44
la requete de kalamit est correcte, mais il manque le group by : "par structure"
SELECT cli_raison_sociale, COUNT(dev_id_devis) as nb_devis, COUNT(cmd_id_commande) as nb_commande FROM client c1 LEFT OUTER JOIN devis t1 on t1.dev_id_client = c1.cli_id_client LEFT OUTER JOIN commande t2 on t2.cmd_id_client = c1.cli_id_client GROUP BY c1.cli_id_client ORDER BY cli_raison_sociale
florent.perret.74
Messages postés
25
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
11 octobre 2012
1 oct. 2012 à 17:39
1 oct. 2012 à 17:39
Niquel ça marche ! Le fameux GROUP BY ! Merci beaucoup à vous deux !