|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Membre du Club
![]() |
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: Code :
Le retour de cette requête ressemble a ça: Code :
J'ai essayé avec un DISTINCT: Mais j'ai le même retour. J'ai également essayé avec un GROUP BY: Code :
Code :
Code :
|
||||||||||
|
00
|
|
|
#2 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 099 ![]() |
Bonjour,
Si le distinct ne dédoublonne pas les lignes, c'est que les autres colonnes ne sont "pas en doublons". Dans ce que je comprends, tu veux dédoublonner sur e0_.id AS id0 et e0_.url AS url1. Mais pour chaque couple de valeur, quelles valeurs pour les autres colonnes faut-il prendre ? La plus petite, la plus grande, la dernière... Tatayo. |
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() Tony Développeur .NET Inscription : novembre 2010 Messages : 570 ![]() |
Exact, et ton erreur dans le group by vient du fait que tous les champs du select (sauf fonctions) doivent être dans le group by.
Donc de toute manière tu te retrouverais avec les mêmes doublons.
__________________
Le Porc est un loup pour le Porc. |
|
|
00
|
|
|
#4 | |
![]() ![]() |
Moi je dirais que le problème vient peut-être un peu de là :
Citation:
Commence par regarder si tu as besoin de toutes ces colonnes dans ton jeu de résultats et en conséquence si tu as besoin de toutes ces jointures. Ta requête sera peut-être plus simple donc plus rapide à exécuter et le jeu de résultat moins gros donc moins lourd à transporter sur le réseau et à traiter dans le programme. Bref, ne te laisse pas imposer la dictature de Doctrine !
__________________
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
|
|
|
#5 |
|
Membre du Club
![]() |
Merci pour vos analyses :p
En principe tout ce qui est dans le select est utilisé lors du traitement. En fait, si je comprend bien j'ai des données dans le select qui m'empêche de grouper par e0_.id. Il faut donc que je repère qu'elles sont les données du select que je ne dois pas select. Je vais chercher dans ce sens là, dites moi si je me trompes :p |
|
00
|
|
|
#6 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 099 ![]() |
Je dirai que si tu veux regrouper sur e0_.id uniquement, toutes les autres colonnes présentes dans la clause select doivent faire l'objet d'une fonction d'aggrégation (Max, Min, Avg...).
Tatayo. |
|
|
00
|
|
|
#7 | ||
![]() ![]() |
DISTINCT opère sur toutes les colonnes du SELECT.
Citation:
Alors je dirais comme Tatyo : Citation:
__________________
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
|
|
|
#8 | |
|
Membre du Club
![]() |
Citation:
Est-ce que le doublon d'enregistrement peut venir du fait qu'a deux reprise je join a mon élément deux fois la même relation ? L'une pour un select, l'autre pour filtrer. => Je dirais que non, vu que ce n'est pas dans un select. Qu'est-ce qui a ce moment la peut faire qu'il y est doublons sur un enregistrement élément ? Je me sens en manque d'expérience dans ces moment la arf ! |
|
|
00
|
|
|
#9 | |||||
![]() ![]() |
Citation:
Je n'avais pas encore regardé ta requête en détail. La seule restriction que je vois est celle-ci : Par contre j'y trouve effectivement deux fois le même couple de jointures : Code :
D'après les jointures, tu as le schéma suivant : m_group -0,n----appartenir-------------------1,1- element - 1,1----typer----0,n- element_type tag -0,n----elements_tag----0,n-------------------------| m_user -0,n----user_elements_favorites----0,n---| Comme pour un élément il peut y avoir plusieurs tags, cela peut aussi générer des plusieurs lignes dans le jeu de résultat de la requête. Un élément peut aussi être favori de plusieurs utilisateurs mais comme on restreint à un seul utilisateur, cette association (0,n - 0,n) ne générera pas plusieurs lignes pour un élément dans le résultat de cette requête. La requête remise en forme pour une lecture plus facile : Code :
__________________
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
|
|
|
#10 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Encore une fois et comme on vous l'as déjà dite, il n'a a pas de doublon dans les résultats de votre requête. Avec DISTINCT toutes les lignes sorties sont unique dans l'ensemble des valeurs de la ligne.
Votre problème vient de deux choses : 1) vous ne savez pas ce que vous voulez, car vous demandez à la fois des données de synthèses et du détail. Or dans la vie il faut choisir ! 2) vous ne comprenez visiblement pas le langage SQL, ni les concepts ensemblistes. Une formation sur SQL et les concepts des SGBDR me parait nécessaire Enfin, l'utilisation d'un ORM est généralement une vaste connerie. Lire l'article que j'ai écrit à ce sujet : http://img1.lemondeinformatique.fr/f...s-epaisses.pdf A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#11 |
|
Membre du Club
![]() |
Eh bien je vous remercie pour tout vos conseils. Je m'attendais a me faire lyncher un petit peu. J'ai toujours eu du mal a saisir le SQL de façon poussé, même pendant mes études ...
Je vais travailler cette requête et lire votre article. |
|
00
|
|
|
#12 |
|
Membre du Club
![]() |
J'ai réfléchi de nouveau à mon problème et ai mieux compris mon erreur (je crois). J'ai ouvert un autre sujet posant la question liée à ma problématique:
http://www.developpez.net/forums/d11...s/#post6405759 |
|
00
|
Copyright © 2000-2012 - www.developpez.com