Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 2004
-
4 sept. 2004 à 15:26
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 2004
-
5 sept. 2004 à 14:40
Salut à tous,
J'ai un problème pour créer une requête mysql.
J'ai une table "vente" avec des champs "id_vente, id_vendeur, id_objet, prix, qtt". Là dedans, je mets toutes les propositions de vente des clients.
Le but est de faire une page d'achat pour les acheteurs avec l'affichage des trois plus petits prix et de la quantité disponible pour chaque prix. Et ce, pour une trentaine d'objets sur la même page.
Le problème, c'est que j'ai pas envie de faire 200 requêtes pour réaliser cette page. Pouvez-vous m'aider à me monter une requete condensée pour avoir tout ça en un coup. ?
-------------------------------
Life is a game, Enjoy ! ^^
gibozsec
Messages postés318Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention11 mars 2010 4 sept. 2004 à 17:17
A mon avis tu vas devoir faire 2 requetes.
Il faut une variable $page qui est le muméro de la page (page1=0, page2=1,...) et tu fait $page=$page*30; pour savoir a partir de quel article tu doit afficher. Ensuite tu sélectionne la liste des articles à afficher avec :
SELECT DISTINCT(id_objet) as id FROM vente LIMIT $page,30;
Ensuite tu fait une boucle, dans la boucle tu lit le nom de l'objet (que tu met par exemple dans $objet) et tu fait
SELECT * FROM vente WHERE id_objet=$objet ORDER BY prix LIMIT 0,3
Cette requète renverra les 3 plus bas prix pour l'objet en cours.
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 4 sept. 2004 à 17:43
Merci de ta réponse
Je suis d'accord, mais si je fais une boucle pour chacun des 30 produits, ça revient au même, je fais donc 31 requêtes, c'est ça le problème. Je me demandais s'il était possible de réaliser ça avec un minimum de requête. Parce que je vois mal le serveur SQL tenir avec 3000 requêtes la minute ...
-------------------------------
Life is a game, Enjoy ! ^^
cs_windu
Messages postés282Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention19 juillet 2006 4 sept. 2004 à 18:35
Si on part du principe que les memes produits ont le meme id_objet si ce n'est pas le cas corrige ce détail...) et si tu ne veux qu'une seule requete SQL, tu peux faire:
SELECT * FROM vente ORDER BY id_objet,prix
tu auras tous tes produits à vendre classés par id_objet puis par prix...
gibozsec
Messages postés318Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention11 mars 2010 4 sept. 2004 à 19:05
Ok, j'avais pas compris je croyait que tu voulais limiter le nombre de requètes à écrire pas à exécuter.
Une autre solution serait de faire une requète du genre
SELECT MIN(prix) as prixMini, id_vente, qtt FROM vente GROUP BY id_ojet LIMIT $page,30;
Le problème c'est que tu n'y afficherais que l'objet le moins chère et pas les 3 moins chère. La fonction MIN permet peut etre de renvoyer 3 résultats essaye de te renseigner, si c'est la cas tu le fera en 1 requete.
?-) Grrrrrrrrrrr ?-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 4 sept. 2004 à 21:04
Merci de vos réponses !
> Windu, ta requête a le mérite d'être courte et simple, mais si il y a 10000 ordres de vente par les clients, pour trier les ordres entre ceux qui correspondent aux trois plus bas prix et les autres, ça doit faire ramer le serveur à mort à chaque chargement de la page.
> gilbozec, la dernière requête que tu as mis est une solution pour avoir le plus bas des prix. c'est la solution par laquelle j'avais commencé à réfléchir. le problème c'est que ça ne donne pas le deuxième plus bas, ni le 3e ...
Je recherche bien le système qui permet de réduire le temps d'exécution et qui sollicite le moins possible le serveur. si c'est long à écrire ça me dérange pas. Si ça me permet de réduire le nombre de requête de 30 à 5 ça me va déjà !
peux-on faire quelque chose au niveau des sous-requêtes qu'on pourrait mettre ? sinon, je serai obliger de me restreindre à n'afficher que le plus bas des prix, et ensuite de faire cliquer l'acheteur sur un des produits pour afficher les différents prix de ce produit ...
-------------------------------
Life is a game, Enjoy ! ^^
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 5 sept. 2004 à 14:40
J'ai la requête permettant d'obtenir les 2 premiers prix. Il faut en fait utiliser 2 fois la même table et d'utiliser HAVING COUNT(DISTINCT prix) <= 2. Par contre, je ne sais pas comment faire pour avoir le nombre de quantité dispo pour ces deux premiers prix.
-------------------------------
Life is a game, Enjoy ! ^^