Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL] Deux tables et un tri

    17 mars 2011 à 19:35:35

    Bonsoir tout le monde.

    J'ai un souci que je n'arrive à résoudre.
    J'ai deux tables. Entreprises et Avis
    La première table, j'ai dedans id_entreprise, nom_entreprise, ville_entreprise
    La seconde table, j'ai dedans id_avis, id_entreprise, dt_avis (date de l'avis)

    Le but de la requête, c'est d'afficher les avis les plus récent (dt_avis desc) selon la ville dans Entreprises en groupant les id_entreprise de Entreprises identiques.

    Je n'ai malheureusement pas sû trouver la solution qui m'est pourtant très importante.

    Merci de votre aide, et si vous avez besoin de plus d'infos, demandez ;)
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2011 à 20:13:37

      Donc, tu voudrais l'avis le plus récent de chaque entreprise qui se situent dans une ville particulière ?
      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2011 à 20:48:07

        Ce sujet a la même problématique, ça devrait te permettre de trouver la solution.
        • Partager sur Facebook
        • Partager sur Twitter
          17 mars 2011 à 20:53:30

          Je viens d'essayer et ca fonctionne pas

          SELECT E.nom_entreprise, A.dt_avis
          FROM Avis A, Entreprises E
          WHERE E.cp_entreprise='75015' and A.id_entreprise = E.id_entreprise
          AND A.dt_avis = 
          (
             SELECT MAX(dt_avis) 
             FROM Avis A 
             WHERE A.id_entreprise = A.id_entreprise
          )
          
          • Partager sur Facebook
          • Partager sur Twitter
            17 mars 2011 à 21:10:03

            SELECT id_entreprise, nom_entreprise, id_avis, dt_avis
            FROM entreprise
                JOIN avis USING(id_entreprise)
                JOIN (SELECT id_entreprise, MAX(dt_avis) as dt_avis
                      FROM avis
                      GROUP BY id_entreprise) t
                    USING(id_entreprise, dt_avis)
            WHERE ville_entreprise = :ville;
            

            Si ça ne donne pas le résultat escompté, il faudra les ordres de créations de tables, un jeu de données et le résultat attendu.
            • Partager sur Facebook
            • Partager sur Twitter
              17 mars 2011 à 21:15:00

              Je pense qu'on est pas loin :

              SELECT id_entreprise, nom_entreprise, id_avis, dt_avis
              FROM Entreprises
                  JOIN Avis USING(id_entreprise)
                  JOIN (SELECT id_entreprise, MAX(dt_avis) as dt_avis
                        FROM Avis
                        GROUP BY id_entreprise) t
                      USING(id_entreprise, dt_avis)
              WHERE ville_entreprise = 'paris' and cp_entreprise='75015';
              


              Mais on met dit que id_entreprise est ambigue car il est connu dans Avis et Entreprises o_O
              • Partager sur Facebook
              • Partager sur Twitter
                17 mars 2011 à 21:21:04

                Rajoute des alias pour les tables entreprises et avis sur le from et le premier join et préfixe le nom de la colonne ambigue.
                • Partager sur Facebook
                • Partager sur Twitter
                  17 mars 2011 à 21:27:09

                  Nouvelle tentative :

                  SELECT *
                  FROM Entreprises E
                      JOIN Avis A USING(id_entreprise)
                      JOIN (SELECT A.id_entreprise, MAX(A.dt_avis) as dt_avis
                            FROM Avis A
                            GROUP BY A.id_entreprise) t
                          USING(id_entreprise, dt_avis)
                  WHERE E.ville_entreprise = 'paris' and E.cp_entreprise='75015' group by E.id_entreprise;
                  


                  J'ai du merder quelques parts car j'ai les premiers avis qui ressortent plutot que les derniers :colere2:
                  Et j'ai l'impression que le group by ralenti vachement la requête
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mars 2011 à 21:31:14

                    Ton dernier group by ne sert à rien, envoie les create table, les insert et le résultat souhaité.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 mars 2011 à 21:56:57

                      SELECT E.nom_entreprise,E.id_entreprise,A.dt_avis
                      FROM Entreprises E
                      JOIN Avis A
                      USING ( id_entreprise ) 
                      JOIN (
                      	SELECT A.id_entreprise,MAX( A.dt_avis ) AS dt_avis
                      	FROM Avis A
                      	group by A.id_entreprise
                      	ORDER BY dt_avis DESC
                      )t
                      USING ( id_entreprise, dt_avis ) 
                      WHERE E.ville_entreprise =  'paris'
                      AND E.cp_entreprise =  '75015'
                      GROUP BY E.id_entreprise
                      ORDER BY dt_avis DESC 
                      LIMIT 0 , 30
                      

                      Ca fonctionne, mais c'est trop lent !!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 mars 2011 à 10:02:04

                        Bon, je m'en sors pas de cette SQL, c'est toujours trop lourd :S
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [SQL] Deux tables et un tri

                        × 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