Page 1 sur 1
afficher un résultat commun
Posté : 11 juil. 2007, 00:16
par martial
Bonjour à tous
Je posséde une table sous cette forme
CLIENT | PRODUITS
DUPONT | lecteur DVD TOSHIBA
DURAND | HOME CINEMA HITACHI
DUBOIS | CAISSON BOOSE
MARTIN | lecteur DVD TOSHIBA
DUBOIS | LCD Sony
Quelle pourrait etre la requête Mysql pour afficher les produits communs achetés par des clients différents?
Résultat:
Lecteur DVD TOSHIBA
DUPONT
MARTIN
Merci d'avance
Posté : 11 juil. 2007, 01:00
par Sékiltoyai
Code : Tout sélectionner
SELECT produit
FROM table table_u1
JOIN table table_u2 ON table_u1.produit = table_u2.produit
WHERE table_u1.client='machin' AND table_u2.client='truc'
Ou bien :
Code : Tout sélectionner
SELECT produit
FROM table
WHERE client='machin' AND produit IN( SELECT produit FROM table WHERE client='truc')
Mais c'est une solution de facilité, et qui plus est, moins performante à mon humble avis.
Au passage, il faut mettre un index sur la colonne client du coup pour optimiser les requètes, et si possible un index numérique plutôt qu'une chaine...
Posté : 11 juil. 2007, 01:16
par martial
en selectionnant un client, j'y suis arrivé!
mais j'aimerais lister tous les clients ayant acheté un produit similaire en fait la condition est "si colonne produit >1"
Posté : 11 juil. 2007, 07:30
par Cyrano
utilise une clause HAVING COUNT(nom-colonne) > 1
Posté : 11 juil. 2007, 15:49
par Sékiltoyai
Le produit est connu ou bien il faut le faire pour tout le monde et tous les produits ?
Posté : 11 juil. 2007, 17:01
par martial
justement le produit est inconnu (sur une base de plusieurs milliers de produit). je voudrais que la requete me fasse ressortir les produits communs achetés par des clients différents!
Posté : 11 juil. 2007, 17:02
par Sékiltoyai
Ca va couter cher en ressources ca si tu n'a pas de conditions ni sur le client, ni sur le produit...
Posté : 12 juil. 2007, 10:00
par martial
En fait je voudrais simplement faire des statistiques (ce que permet une base de données), savoir quel est le produit le plus populaire et envoyer des bons de réduction aux clients ayant acheté ce produit!
La requête en bon français est:
selectionne les produits dans la table vente
quand le client est supérieur à un
groupe les par produits
ordonne les par produits les plus achetés
Posté : 12 juil. 2007, 14:41
par Sékiltoyai
Essaye ca :
Code : Tout sélectionner
SELECT produit, COUNT(produit), GROUP_CONCAT(client)
FROM table
GROUP BY produit
ORDER BY COUNT(produit) DESC
Posté : 12 juil. 2007, 16:25
par martial
Merci Sékiltoyai pour le GROUP_CONCAT!
Voilà la réponse (en fait il faut créer une table temporaire!)
Code : Tout sélectionner
CREATE TEMPORARY TABLE temp SELECT DISTINCT client,produit
FROM `vente`
WHERE client >1;
SELECT produit, count(produit ),GROUP_CONCAT(client)
FROM temp
GROUP BY produit
HAVING count( produit ) >1
ORDER BY produit DESC
RESULTATS
produits | nombre | clients |
Lecteur DVD TOSHIBA| 2 | DUPONT, MARTIN|
ET c'est parti pour les stats de la mort!!!!!!!!!!!!
Posté : 12 juil. 2007, 16:28
par Sékiltoyai
Ca veut dire quoi "WHERE client >1;" ? Ton champ client, c'est un varchar, non ?
Posté : 12 juil. 2007, 16:37
par martial
Oui c'est vrai cette condition ne sert à rien, je viens de l'enlever est le résultat est le même!
En fait j'aurais pu écrire
mais en fait le champ client est NOT NULL par défaut!
Posté : 12 juil. 2007, 16:39
par Sékiltoyai
Ta table temporaire ne sert à rien alors. Et ca bouffe des ressources.