Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur requête imbriqué

#1241 - Operand should contain 1 column(s)

    29 mars 2011 à 19:00:47

    Bonjour,

    Je souhaite récupérer les 10 derniers posts des catégories mère, pour ceci je voudrais faire une requête imbriqué mais j'ai ce message d'erreur:

    #1241 - Operand should contain 1 column(s)
    


    Pourriez-vous regarder ma requête et me dire si vous voyez ou est l'erreur parce que la je sèche.

    merci

    SELECT `Post`.`id`, `Post`.`title`, `Post`.`link`, `Post`.`nb_vue`, `Post`.`category_id`, `Post`.`created` 
    FROM `posts` AS `Post` 
    WHERE `Post`.`category_id` 
    IN ( 
       SELECT `Category`.`id`, `Category`.`parent_id` 
       FROM `categories` AS `Category`
       WHERE `Category`.`parent_id` IS NULL 
       ORDER BY `Category`.`id` ASC 
       ) 
    ORDER BY `nb_vue` desc, `created` desc  
    LIMIT 10
    


    J'ai donc ma première requête qui cherche les champs dont j'ai besoin dans la table posts limité à 10 (pour 10 posts pas catégories) et dans le IN j'ai la requête qui cherche les catégories mère qui non pas de parent_id.
    • Partager sur Facebook
    • Partager sur Twitter
      29 mars 2011 à 19:07:17

      La sous-requête dans le IN ne peut pas sélectionner plus d'une colonne. D'ailleurs, pourquoi mets-tu des ` partout ?
      • Partager sur Facebook
      • Partager sur Twitter
        29 mars 2011 à 19:16:58

        Bonjour merci pour ta réponse.

        Aille !! comment je vais faire j'ai besoin de ces deux colonnes pour définir les id que je veux dans la seconde requête, ont peux pas contourner cette chose?

        Je trouve sa plus propre, c'est un coup que j'ai pris sur cakephp qui écris toutes les requêtes ainsi.
        • Partager sur Facebook
        • Partager sur Twitter
          29 mars 2011 à 22:21:49

          Je vois vraiment pas pourquoi tu aurais besoin de parent_id dans le select... Dans le where ok, mais pas dans le select...

          Et c'est pas plus propre, au contraire. C'est un "truc" de mysql pour quand même laisser passer des choses sales justement...
          • Partager sur Facebook
          • Partager sur Twitter
            29 mars 2011 à 22:52:23

            Effectivement, parent_id vaut toujours NULL, quel est l'intérêt de le sélectionner ?

            Et, encore une fois, je suis d'accord avec Taguan, ça ne rend pas une requête plus propre. Pire, elle est beaucoup plus difficile à lire. D'ailleurs, inutile de préfixer tes colonnes par le nom de tes tables lorsque ce n'est pas obligatoire. Encore une fois, ça alourdit ta requête. Dernière chose : ORDER BY dans une sous-requête, c'est mal, surtout quand il ne sert en rien.

            Au final, si on réécrit correctement ta requête, on passe de 382 à 195 caractères. C'est déjà ça de moins.
            • Partager sur Facebook
            • Partager sur Twitter
              31 mars 2011 à 15:22:37

              Bonjour, je savais pas qu'on pouvais faire une condition sur une colonne qu'on demandais pas chercher à mysql donc effectivement la sous requête comme ceci fonctionne:

              SELECT id FROM categories WHERE parent_id IS NULL
              


              J'ai pas vraiment le choix de l'écriture de la requête je l'écris sous forme de tableau php en réalité ce que je vous transmet c'est juste le retour que cakephp me donne, j'ai pas trop envie de supprimer tout les index de table avant de la poster :) qu'elle fainéant :-°
              • Partager sur Facebook
              • Partager sur Twitter

              Erreur requête imbriqué

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown