J'ai deux tables dans ma BD, les clients et les articles. Je dois
afficher la liste des clients (avec informations sur le client) et
afficher pour chaque client, le nombre des articles qui vérifient
certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à
travers ma table des clients et pour chacun d'entre eux, je récupère les
informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record d'article
contient le no du client) plusieurs fois en faisant à chaque fois des
count(*) car je dois ultimement compter les records vérifiant les
différentes conditions pour chaque client.
Style:
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition1
= vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition2
= vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition3
= vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition4
= vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de
faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires:
1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un order
by différent éventuellement sur chaque requête.
2. Je ne récupère pas forcément les mêmes champs pour chaque requête,
quoi que je pourrais certainement trouver un ensemble commun si nécessaire.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Xavier Nayrac
max a écrit :
Bonjour à tous,
J'ai deux tables dans ma BD, les clients et les articles. Je dois afficher la liste des clients (avec informations sur le client) et afficher pour chaque client, le nombre des articles qui vérifient certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à travers ma table des clients et pour chacun d'entre eux, je récupère les informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record d'article contient le no du client) plusieurs fois en faisant à chaque fois des count(*) car je dois ultimement compter les records vérifiant les différentes conditions pour chaque client.
Style: SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition1 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition2 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition3 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition4 = vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires: 1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un order by différent éventuellement sur chaque requête. 2. Je ne récupère pas forcément les mêmes champs pour chaque requête, quoi que je pourrais certainement trouver un ensemble commun si nécessaire.
Votre aide me serait précieuse... Merci,
Max
Bonjour Max,
Pourrais tu préciser un peu ta pensée et donner des infos complémentaires car j'ai du mal à cerner ton problème :
* structure des tables * quelle(s) requête(s) te pose(nt) un problème ? * quel est ta question exactement ? * un exemple de l'état de sortie que tu cherches à obtenir
-- Xavier Nayrac
max a écrit :
Bonjour à tous,
J'ai deux tables dans ma BD, les clients et les articles. Je dois
afficher la liste des clients (avec informations sur le client) et
afficher pour chaque client, le nombre des articles qui vérifient
certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à
travers ma table des clients et pour chacun d'entre eux, je récupère les
informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record d'article
contient le no du client) plusieurs fois en faisant à chaque fois des
count(*) car je dois ultimement compter les records vérifiant les
différentes conditions pour chaque client.
Style:
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition1
= vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition2
= vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition3
= vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition4
= vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de
faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires:
1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un order
by différent éventuellement sur chaque requête.
2. Je ne récupère pas forcément les mêmes champs pour chaque requête,
quoi que je pourrais certainement trouver un ensemble commun si nécessaire.
Votre aide me serait précieuse...
Merci,
Max
Bonjour Max,
Pourrais tu préciser un peu ta pensée et donner des infos
complémentaires car j'ai du mal à cerner ton problème :
* structure des tables
* quelle(s) requête(s) te pose(nt) un problème ?
* quel est ta question exactement ?
* un exemple de l'état de sortie que tu cherches à obtenir
J'ai deux tables dans ma BD, les clients et les articles. Je dois afficher la liste des clients (avec informations sur le client) et afficher pour chaque client, le nombre des articles qui vérifient certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à travers ma table des clients et pour chacun d'entre eux, je récupère les informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record d'article contient le no du client) plusieurs fois en faisant à chaque fois des count(*) car je dois ultimement compter les records vérifiant les différentes conditions pour chaque client.
Style: SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition1 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition2 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition3 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition4 = vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires: 1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un order by différent éventuellement sur chaque requête. 2. Je ne récupère pas forcément les mêmes champs pour chaque requête, quoi que je pourrais certainement trouver un ensemble commun si nécessaire.
Votre aide me serait précieuse... Merci,
Max
Bonjour Max,
Pourrais tu préciser un peu ta pensée et donner des infos complémentaires car j'ai du mal à cerner ton problème :
* structure des tables * quelle(s) requête(s) te pose(nt) un problème ? * quel est ta question exactement ? * un exemple de l'état de sortie que tu cherches à obtenir
-- Xavier Nayrac
max
Xavier Nayrac a écrit :
max a écrit :
Bonjour à tous,
J'ai deux tables dans ma BD, les clients et les articles. Je dois afficher la liste des clients (avec informations sur le client) et afficher pour chaque client, le nombre des articles qui vérifient certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à travers ma table des clients et pour chacun d'entre eux, je récupère les informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record d'article contient le no du client) plusieurs fois en faisant à chaque fois des count(*) car je dois ultimement compter les records vérifiant les différentes conditions pour chaque client.
Style: SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition1 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition2 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition3 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition4 = vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires: 1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un order by différent éventuellement sur chaque requête. 2. Je ne récupère pas forcément les mêmes champs pour chaque requête, quoi que je pourrais certainement trouver un ensemble commun si nécessaire.
Votre aide me serait précieuse... Merci,
Max
Bonjour Max,
Pourrais tu préciser un peu ta pensée et donner des infos complémentaires car j'ai du mal à cerner ton problème :
* structure des tables * quelle(s) requête(s) te pose(nt) un problème ? * quel est ta question exactement ? * un exemple de l'état de sortie que tu cherches à obtenir
Bonjour Xavier,
En fait, les tables sont organisées "normalement", deux tables toutes simples avec chacune environ 20 champs. J'ai expliqué comment la table cli est reliée à la table art dans mon introduction.
Mon problème est que la conjonction des requêtes de comptage imbriquées dans la requête principale sur chaque client (sur la table cli) prend beaucoup de temps. Je me disais qu'il existait peut-être une meilleure façon d'aller chercher l'information, comme une requête avec un "join" pour aller chercher chaque client et le nombre d'article de chaque catégorie pour ce client. Étant donné que le numéro du client est sur chaque article, je me dit qu'on pourrait simplement fouillé dans la table art et rechercher, pour chaque client, les articles de chaque catégorie.
J'espère que cela pourra aider dans vos propositions. Merci,
Max
Xavier Nayrac a écrit :
max a écrit :
Bonjour à tous,
J'ai deux tables dans ma BD, les clients et les articles. Je dois
afficher la liste des clients (avec informations sur le client) et
afficher pour chaque client, le nombre des articles qui vérifient
certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à
travers ma table des clients et pour chacun d'entre eux, je récupère
les informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record
d'article contient le no du client) plusieurs fois en faisant à chaque
fois des count(*) car je dois ultimement compter les records vérifiant
les différentes conditions pour chaque client.
Style:
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND
condition1 = vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND
condition2 = vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND
condition3 = vrai)
SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND
condition4 = vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de
faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires:
1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un
order by différent éventuellement sur chaque requête.
2. Je ne récupère pas forcément les mêmes champs pour chaque requête,
quoi que je pourrais certainement trouver un ensemble commun si
nécessaire.
Votre aide me serait précieuse...
Merci,
Max
Bonjour Max,
Pourrais tu préciser un peu ta pensée et donner des infos
complémentaires car j'ai du mal à cerner ton problème :
* structure des tables
* quelle(s) requête(s) te pose(nt) un problème ?
* quel est ta question exactement ?
* un exemple de l'état de sortie que tu cherches à obtenir
Bonjour Xavier,
En fait, les tables sont organisées "normalement", deux tables toutes
simples avec chacune environ 20 champs. J'ai expliqué comment la table
cli est reliée à la table art dans mon introduction.
Mon problème est que la conjonction des requêtes de comptage imbriquées
dans la requête principale sur chaque client (sur la table cli) prend
beaucoup de temps. Je me disais qu'il existait peut-être une meilleure
façon d'aller chercher l'information, comme une requête avec un "join"
pour aller chercher chaque client et le nombre d'article de chaque
catégorie pour ce client. Étant donné que le numéro du client est sur
chaque article, je me dit qu'on pourrait simplement fouillé dans la
table art et rechercher, pour chaque client, les articles de chaque
catégorie.
J'ai deux tables dans ma BD, les clients et les articles. Je dois afficher la liste des clients (avec informations sur le client) et afficher pour chaque client, le nombre des articles qui vérifient certaines conditions (vendu, en attente, retour, etc.)
Tout ce que j'ai trouvé à faire pour le moment, c'est de passer à travers ma table des clients et pour chacun d'entre eux, je récupère les informations spécifiques dont j'ai besoin (nom, adresse, etc.).
SELECT info1, info2 FROM `cli` WHERE (dep_id = '".$dep_id."')
Puis, je passe à travers la table des articles (chaque record d'article contient le no du client) plusieurs fois en faisant à chaque fois des count(*) car je dois ultimement compter les records vérifiant les différentes conditions pour chaque client.
Style: SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition1 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition2 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition3 = vrai) SELECT count(*) FROM `art` WHERE (dep_id = '".$dep_id."' AND condition4 = vrai)
et ainsi de suite. Je me doute que ce n'est pas la meilleure façon de faire mais je n'en n'ai pas trouvé d'autres.
Informations supplémentaires: 1. Les conditions (1, 2, 3, etc.) sont toutes différentes, avec un order by différent éventuellement sur chaque requête. 2. Je ne récupère pas forcément les mêmes champs pour chaque requête, quoi que je pourrais certainement trouver un ensemble commun si nécessaire.
Votre aide me serait précieuse... Merci,
Max
Bonjour Max,
Pourrais tu préciser un peu ta pensée et donner des infos complémentaires car j'ai du mal à cerner ton problème :
* structure des tables * quelle(s) requête(s) te pose(nt) un problème ? * quel est ta question exactement ? * un exemple de l'état de sortie que tu cherches à obtenir
Bonjour Xavier,
En fait, les tables sont organisées "normalement", deux tables toutes simples avec chacune environ 20 champs. J'ai expliqué comment la table cli est reliée à la table art dans mon introduction.
Mon problème est que la conjonction des requêtes de comptage imbriquées dans la requête principale sur chaque client (sur la table cli) prend beaucoup de temps. Je me disais qu'il existait peut-être une meilleure façon d'aller chercher l'information, comme une requête avec un "join" pour aller chercher chaque client et le nombre d'article de chaque catégorie pour ce client. Étant donné que le numéro du client est sur chaque article, je me dit qu'on pourrait simplement fouillé dans la table art et rechercher, pour chaque client, les articles de chaque catégorie.
J'espère que cela pourra aider dans vos propositions. Merci,
Max
Bonjour,
essaye quelque chose dans ce genre :
select no_client, sum(if(vendu is not null,1,0)) as nbvendu, sum(if(remis is not null,1,0)) as nbremis, sum(if(achete is not null,1,0)) as nbachete, sum(if(retourne is not null,1,0)) as nbretourne from clients left join articles on ............ group by no_client
C'est bien entendu a adapter à tes tables, mais c'est sur ce principe que je procéderai ...
J'espère que cela pourra aider dans vos propositions.
Merci,
Max
Bonjour,
essaye quelque chose dans ce genre :
select
no_client,
sum(if(vendu is not null,1,0)) as nbvendu,
sum(if(remis is not null,1,0)) as nbremis,
sum(if(achete is not null,1,0)) as nbachete,
sum(if(retourne is not null,1,0)) as nbretourne
from
clients
left join articles on ............
group by
no_client
C'est bien entendu a adapter à tes tables, mais c'est sur ce principe
que je procéderai ...
J'espère que cela pourra aider dans vos propositions. Merci,
Max
Bonjour,
essaye quelque chose dans ce genre :
select no_client, sum(if(vendu is not null,1,0)) as nbvendu, sum(if(remis is not null,1,0)) as nbremis, sum(if(achete is not null,1,0)) as nbachete, sum(if(retourne is not null,1,0)) as nbretourne from clients left join articles on ............ group by no_client
C'est bien entendu a adapter à tes tables, mais c'est sur ce principe que je procéderai ...