Bonjour!
Je travaille sur une requête assez conséquente mais qui me pose un petite problème. Je n'arrive pas a obtenir une ligne de retour par élément recherché.
Voici la requête:
Pour ce qui reconnaisses c'est une requête SQL généré avec Doctrine (2.0). Il y a beaucoup de jointures, ce qui rend un peu moins lisible la requête veuillez m'excuser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT e0_.id AS id0, e0_.url AS url1, e0_.name AS name2, e0_.embed AS embed3, e0_.created AS created4, e0_.updated AS updated5, m1_.id AS id6, m1_.name AS name7, m1_.slug AS slug8, m1_.description AS description9, m1_.open AS open10, e2_.id AS id11, e2_.name AS name12, t3_.id AS id13, t3_.name AS name14, t3_.count AS count15, u4_.id AS id16, m5_.username AS username17, m5_.username_canonical AS username_canonical18, m5_.email AS email19, m5_.email_canonical AS email_canonical20, m5_.enabled AS enabled21, m5_.algorithm AS algorithm22, m5_.salt AS salt23, m5_.password AS password24, m5_.last_login AS last_login25, m5_.locked AS locked26, m5_.expired AS expired27, m5_.expires_at AS expires_at28, m5_.confirmation_token AS confirmation_token29, m5_.password_requested_at AS password_requested_at30, m5_.roles AS roles31, m5_.credentials_expired AS credentials_expired32, m5_.credentials_expire_at AS credentials_expire_at33, m5_.id AS id34, m5_.slug AS slug35, e0_.element_type_id AS element_type_id36, e0_.user_id AS user_id37, e0_.group_id AS group_id38, m1_.user_id AS user_id39, u4_.user_id AS user_id40, u4_.element_id AS element_id41 FROM element e0_ LEFT JOIN m_group m1_ ON e0_.group_id = m1_.id LEFT JOIN element_type e2_ ON e0_.element_type_id = e2_.id LEFT JOIN elements_tag e7_ ON e0_.id = e7_.element_id LEFT JOIN tag t6_ ON t6_.id = e7_.tag_id LEFT JOIN elements_tag e8_ ON e0_.id = e8_.element_id LEFT JOIN tag t3_ ON t3_.id = e8_.tag_id LEFT JOIN users_elements_favorites u4_ ON e0_.id = u4_.element_id AND (u4_.user_id = ?) INNER JOIN m_user m5_ ON e0_.user_id = m5_.id ORDER BY e0_.created DESC, e0_.name DESC LIMIT 5
Le retour de cette requête ressemble a ça:
En gros, j'ai des doublons dans les résultats. Car ce que je cherche ici, ce sont des enregistrement de la table "element"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1 | element1 | ... 2 | element2 | ... 2 | element2 | ... 3 | element3 | ...
J'ai essayé avec un DISTINCT:
Mais j'ai le même retour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT e0_.id AS id0 ...
J'ai également essayé avec un GROUP BY:
Mais les doublons sont toujours là. Il me semblerait bien pratique de faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [...] INNER JOIN m_user m5_ ON e0_.user_id = m5_.id GROUP BY e0_.id, e2_.id, t3_.id, m5_.id, m1_.id, u4_.id ORDER BY e0_.created DESC, e0_.name DESC LIMIT 5
Mais les colonnes inclus dans le select doivent apparaître dans le group by:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [...] INNER JOIN m_user m5_ ON e0_.user_id = m5_.id GROUP BY e0_.id ORDER BY e0_.created DESC, e0_.name DESC LIMIT 5
Y a t-il une solution d'après vous?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERROR: column "m1_.id" must appear in the GROUP BY clause or be used in an aggregate function État SQL :42803 Caractère : 139
Partager