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

PHP & Base de données Discussion :

[Doctrine] SELECT imbriqué


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut [Doctrine] SELECT imbriqué
    Bonjour à tous,

    J'ai une requête qui me pose problème dans un projet de site web.
    J'ai une table produit et une table test. Sur chaque produits peuvent être effectués plusieurs tests et ces tests possèdent un champ num_test qui indique si le test est le premier, deuxième, ... ou n-ème test effectué sur le produit.
    Je souhaite récupérer avec une requête tous les derniers tests effectués sur tous les produits. Pour ce faire j'utilisais jusqu'à présent la requête suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t.* FROM test t 
    WHERE t.num_test =
               (SELECT MAX(num_test) FROM test WHERE product_id = t.product_id)
    Le problème de cette requête est que lorsque le nombre de test sur un produit était trop important (au dela du millier de tests), cette dernière devenait beaucoup trop longue à s’exécuter à cause de la clause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE product_id = t.product_id
    J'ai donc pensé à utiliser cette nouvelle requête qui semble s'éxecuter plus rapidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT t.* FROM (SELECT * FROM test order by num_test desc ) t 
    GROUP BY product_id
    mais je ne sais pas comment traduire ce SELECT imbriqué sous Doctrine.

    Je voulais donc savoir comment écrire cela sous Doctrine et si il y a une meilleur solution pour réaliser ce genre de requête.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Vu que, dans doctrine, la clause ->from() doit porter sur un objet du modèle, il ne sera jamais possible d'y intégrer ta requête.

    Il doit être possible de ce servir de Doctrine pour simplement exécuter une requête, sans la toucher, style pdo et de récupérer juste un array avec les données.

    Par contre, je ne vois pas trop l'intérêt de l'imbrication des requêtes, un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT t.data1, t.data2... FROM test t ORDER BY num_test desc
    ne serait-il pas plus court ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    Je souhaite récupéré la ligne entière et non pas seulement les champs distinct(product_id) donc la requête que tu proposes ne fonctionne pas malheuresement. Je crois que je vais me résoudre à utiliser une requête pdo même si ça me chagrine un peu car cette doctrine_query me servait à alimenter un objet sfPager de symfony.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu ne peux pas faire tourner un Doctrine sur une table qui ne fait pas partie du modèle.

    Il reste une solution (pas propre... quoique). Créer un objet du modèle indépendant qui correspond au résultat que tu souhaites et l’appuyer sur une requête enregistrée sur le serveur qui te retourne tes données.

    Ceci me semble un rien bancal et est à approfondir.

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. [MySql] Pb de select imbriqué
    Par 12_darte_12 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/02/2006, 12h21
  3. [ SQL ] Faire un update avec un select imbriqué
    Par zozolh2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/04/2005, 12h05
  4. le select imbriqué correlé
    Par Tanahjampea dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2004, 09h49
  5. SYBASE SELECT imbriqué clause FROM
    Par Nicolas Martel dans le forum Sybase
    Réponses: 2
    Dernier message: 19/11/2003, 15h28

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