IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Subquery returns more than 1 row


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Par défaut Subquery returns more than 1 row
    Bonjour,

    J'ai fais une requete assez "complexe" et la plus j'avance plus je bloque !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT user.*, SUM(thread.upload) AS tot, SUM(thread_mois.upload) AS mois, SUM(thread_lastm.upload) AS lastm FROM user
    LEFT JOIN thread AS thread ON (user.userid=thread.postuserid AND thread.postuserid=user.userid)
    LEFT JOIN thread AS thread_mois ON (user.userid=thread_mois.postuserid AND thread_mois.postuserid=user.userid AND (SELECT dateline FROM thread WHERE dateline>= " . $debut_mois . "))
    LEFT JOIN thread AS thread_lastm ON (user.userid=thread_lastm.postuserid AND thread_lastm.postuserid=user.userid AND (SELECT dateline FROM thread WHERE dateline>= " . $debut_lastm . " AND dateline<= " . $fin_lastm . "))
    GROUP BY user.userid
    ORDER BY tot DESC
    Mon erreur est a cause des deux AND (SELECT dateline...) !

    Voici l'erreur que me retourne MySQL:
    Subquery returns more than 1 row
    Si quelqu'un saurait me débloquer...

    Merci beaucoup,

    Cordialement,
    Mathieu.

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Par défaut
    En ajoutant LIMIT 1 dans me AND (Select...) ma requete fonctionne mais mon mois et tot et lastm sont doublés...

  3. #3
    Membre éclairé Avatar de jp_rennes
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Par défaut pas sûr
    je me trompe peut être mais le probléme semble provenir de la sous requête :
    AND (SELECT dateline FROM thread WHERE dateline>= " . $debut_mois . ")

    As-tu essyé AND dateline IN (SELECT dateline FROM thread WHERE dateline>= " . $debut_mois . ").... ?

    Je ne suis pas sûr de mon coup n'ayant pas la base sous les yeux......

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Bonjour,

    Citation Envoyé par Dans les règles du forum il y
    Donnez les ordres SQL de création de vos tables (CREATE TABLE) et éventuellement les INSERT d'un jeu de données basique pour que tout un chacun puisse reproduire ce que vous voulez faire sur son SGBDR afin de mieux vous aider.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE MaTable
    (Col1 VARCHAR(128),
     Col2 INTEGER,
     Col3 DATE,
     Col4 CHAR(32),
     CONSTRAINT PK_MaTable PRIMARY KEY (COL1, COL2))
     
    INSERT INTO MaTable (COL1, COL2, COL3) 
    VALUES ('Un mot', 32, CURRENT_TIMESTAMP)
    INSERT INTO MaTable (COL1, COL2, COL3) 
    VALUES ('Deux maux', 0, NULL)
    présentez le résultat que vous voulez voir apparaître sous la forme d'une table.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -- Le résultat attendu :
    NOM     VILLE       NOMBRE 
    ------  ----------  ------ 
    MARTIN  PARIS            2 
    DUPOND  STRASBOURG       3
    ...

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Par défaut
    Merci pour ta réponse jp_rennes->
    Column 'dateline' in IN/ALL/ANY subquery is ambiguous
    Maximilian je vous prepare ça alors !

    Merci à vous !

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Par défaut
    Ma nouvelle requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT user.*, SUM(thread.upload) AS tot, SUM(thread_mois.upload) AS mois, SUM(thread_lastm.upload) AS lastm FROM user
    LEFT JOIN thread AS thread ON (user.userid=thread.postuserid AND thread.postuserid=user.userid)
    LEFT JOIN thread AS thread_mois ON (user.userid=thread_mois.postuserid AND thread_mois.postuserid=user.userid AND dateline IN (SELECT dateline FROM thread WHERE dateline>=" . $debut_mois . "))
    LEFT JOIN thread AS thread_lastm ON (user.userid=thread_lastm.postuserid AND thread_lastm.postuserid=user.userid AND dateline IN (SELECT dateline FROM thread WHERE dateline>=" . $debut_lastm . " AND dateline<=" . $fin_lastm . "))
    GROUP BY user.userid
    ORDER BY tot DESC
     
    $debut_mois: Date du debut du mois.
    $debut_lastm: Date du debut du mois dernier.
    $fin_lastm: Date de la fin du mois dernier.
    Cette requete me donne cette erreur:
    Column 'dateline' in IN/ALL/ANY subquery is ambiguous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE TABLE `user` (
    `userid` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `username` VARCHAR( 100 ) NOT NULL ,
    INDEX ( `username` )
    );
     
    CREATE TABLE thread
    (threadid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(250) NOT NULL,
    postuserid INT(10) UNSIGNED NOT NULL,
    dateline INT(10) UNSIGNED NOT NULL,
    upload INT(10),
    INDEX(postuserid), INDEX(dateline))
    Liens entre les 2 table -> user.userid=thread.postuserid

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 15/11/2007, 10h22
  2. #1242 - Subquery returns more than 1 row
    Par Loan26 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/11/2007, 20h32
  3. Réponses: 4
    Dernier message: 25/01/2007, 15h02
  4. Réponses: 3
    Dernier message: 08/12/2006, 17h28
  5. ORA-01427: single-row subquery returns more than one row
    Par hadid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/10/2006, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo