MYSQL Select
Résolu
florent.perret.74
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
florent.perret.74 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
florent.perret.74 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai créer un listing de tous mes clients avec la requete SQL suivant :
SELECT * FROM client
Ensuite dans une boucle en PHP, je fais encore deux requêtes pour lister mon nombre de devis par client et le nombre de commande :
SELECT count(dev_id_devis) as nb_devis FROM devis t1 WHERE cli_id_client= '$client' GROUP BY cli_id_client
idem pour les commandes.
Ma question est la suivante : Est-il possible de réunir les 3 requêtes en une seule ?
Ex:
SELECT cli_raison_sociale, (SELECT count(dev_id_devis)
FROM devis t1
) as nb_devis,
(SELECT count(cmd_id_commande)
FROM commande t2
) as nb_commande
FROM client
ORDER BY cli_raison_sociale
Je pense que je suis pas loin de la solution si c'est possible....
Merci à tous...
Florent PERRET
J'ai créer un listing de tous mes clients avec la requete SQL suivant :
SELECT * FROM client
Ensuite dans une boucle en PHP, je fais encore deux requêtes pour lister mon nombre de devis par client et le nombre de commande :
SELECT count(dev_id_devis) as nb_devis FROM devis t1 WHERE cli_id_client= '$client' GROUP BY cli_id_client
idem pour les commandes.
Ma question est la suivante : Est-il possible de réunir les 3 requêtes en une seule ?
Ex:
SELECT cli_raison_sociale, (SELECT count(dev_id_devis)
FROM devis t1
) as nb_devis,
(SELECT count(cmd_id_commande)
FROM commande t2
) as nb_commande
FROM client
ORDER BY cli_raison_sociale
Je pense que je suis pas loin de la solution si c'est possible....
Merci à tous...
Florent PERRET
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
- Please select boot device - Forum Windows 7
- Reboot and select proper boot device - Forum Windows
- Select boot mode android - Guide
6 réponses
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...
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...
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...
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
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 !
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 !
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