Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/06/2011, 17h36   #1
Invité de passage
 
Homme mehdi mehdi
Administrateur de base de données
Inscription : juin 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme mehdi mehdi
Localisation : Maroc

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 1
Points : 0
Points : 0
Par défaut Error: Subquery returns more than 1 row

J'ai un problème sur une requête SQL dans PHP :
Citation:
Error: Subquery returns more than 1 row
La requête :
Code PHP :
$sql="SELECT nom_filliere FROM `filliere` WHERE num_filliere = (SELECT num_filliere FROM `trouve` WHERE idc =(SELECT `idc` FROM `inscris` WHERE CNE='$id'))";
amisoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 08h52   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

Le message est bien explicite.
La partie du code concernée est celle-ci:

Code :
SELECT num_filliere FROM `trouve` WHERE idc =(SELECT `idc` FROM `inscris` WHERE CNE='$id')
Vous avez probablement plusieurs tuples retournés pour :

Code :
SELECT `idc` FROM `inscris` WHERE CNE='$id'
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 09h31   #3
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
bonjour

comme l'indique mikedavem, la sous-requête renvoie plusieurs lignes.
et comme la clause WHERE demande un "=", cela sous-entend, une ligne uniquement.
pour en accepter plusieurs, il faut modifier la clause WHERE par :

Code SQL :
1
2
3
4
5
6
7
  SELECT Nom_Filliere
      FROM ` Filliere `
      WHERE Num_Filliere IN (SELECT Num_Filliere
                              FROM ` Trouve `
                              WHERE Idc IN (SELECT ` Idc `
                                             FROM ` Inscris `
                                             WHERE Cne = '$id'))

NB : Pensez à formater la requête avant de l'envoyer, et de la purger de la partie PHP
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 23h29   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Tout ceci serait sûrement plus simple et plus performant avec des 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 12h39   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Hé oui ... Par exemple sous SQL Server :

Code :
1
2
3
4
5
SELECT		F.Nom_Filliere
FROM		Filliere AS F
INNER JOIN	Trouve AS T ON F.Num_Filliere = T.Num_Filliere
INNER JOIN	Inscris AS I ON T.Idc = I.Idc
WHERE		I.Cne = '$id'
Et encore y'a pas le nom du schéma ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h46.


 
 
 
 
Partenaires

Hébergement Web