|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 39 ![]() |
Bonsoir à tous
Je me permets de solliciter votre aide afin de m'aider à résoudre un petit problème avec une requête SQL (d'où la rubrique du forum Je vous explique un petit le problème. J'ai une requête qui contient une deuxième requête à l’intérieur. Lors de son éxécution /s phpMyAdmin, j'obtiens l'erreur suivante : #1242 - Subquery returns more than 1 rowMa première requête me permet d'obtenir des informations sur une petite annonce (titre, description, prix ...etc), la seconde me permet de récupérer la liste des différents moyens d'expédition qui sont disponibles pour cette annonce (nom et prix du moyen d'éxpédition). J'ai effectué des recherches mais je n'ai rien trouvé au sujet d'un cas similaire au mien ... Si vous avez une idée ou une piste pour résoudre mon petit problème je prends avec plaisir Merci d'avance et bonne soirée |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
Peut-on voir la requête en question, ainsi que le schéma des tables associées et éventuellement un petit jeu de données ? Ça nous permettrait de répondre plus efficacement à la question.
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 39 ![]() |
Oui biensur
La table qui contient les annonces se présente ainsi : #adsJe vous donne un exemple d'une annonce "type" : Un vélo (ads.id:1) est en vente au prix de 100€. Le vendeur permet pour la livraison de celui ci plusieurs possibilités à savoir : la remise en mains propres (expedition.id:1), l'expédition par la poste (expedition_id:2) au prix de 12€. Les données de la table "ads_expedition" seraient les suivantes : 1;1;1;0 1;1;2;12 J'espère avoir pu être un petit peu plus clair Merci d'avance pour votre temps |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Bonsoir,
Peut-on voir la requête en question ou c'est un secret? |
|
|
00
|
|
|
#5 | ||
|
Invité régulier
![]() Inscription : mai 2007 Messages : 39 ![]() |
Bonjour
Oui biensur j'avais totalement zappé de la mettre la dernière fois ... Code :
Merci d'avance |
||
|
|
00
|
|
|
#6 |
![]() ![]() |
Apparemment, tu as besoin d'un cours sur les jointures !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 39 ![]() |
Je pourrais avoir un petit axe sur lequel m'orienter ?
|
|
|
00
|
|
|
#8 | ||
|
Invité régulier
![]() Inscription : mai 2007 Messages : 39 ![]() |
Bon j'ai essayé une requête qui me permet d'obtenir ce que je souhaite :
Code :
TITRE1 | DESCRIPTION1 | PRICE1 | NAME_EXPEDITION1 | PRICE_EXPEDITION1 TITRE1 | DESCRIPTION1 | PRICE1 | NAME_EXPEDITION2 | PRICE_EXPEDITION2 Il serait possible d'optimiser cela afin d'obtenir : TITRE1 | DESCRIPTION1 | PRICE1 | TABLEAU[NAME_EXPEDITIONn | PRICE_EXPEDITIONn] |
||
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Regarde du côté de GROUP_CONCAT, mais ce n'est pas standard SQL.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 39 ![]() |
Merci beaucoup pour le coup de main
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 850 ![]() |
salut,
l'erreur était du au fait que ton select interne renvoyait plus d'une ligne de résultats or comme tu es à l’intérieur d'un autre select, il ne peut donc renvoyer qu'une ligne maximum. Les jointures sont toujours préférables à ce genre d'écriture car plus optimisées ![]() Les jointures renvoient autant de ligne qu'il y a de chose renvoyées dans les 2 tables mises en jeu par rapport au critère de jointure (inner join). Les left et right join vont te renvoyé au minimum le nombre de lignes sorties de la table de référence qui est à gauche (left) ou droite (right) de la jointure. comme ça te l'a été dit si tu veux compacter tes résultats, tu devras faire un groupe by sur les colonnes de la tables de référence et un group_concat sur celles renvoyées par la jointure |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com