Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requete sélectionner que les moins cher

Sujet résolu
    2 avril 2011 à 11:15:19

    Bonjour,


    J'ai une requête qui sélectionne dans ma table des tableaux avec leur prix !

    Je les affiche avec une boucle !!

    Seulement lorsqu'il y a plusieurs fois le même tableau j'aimerai n'afficher que le tableau le moins cher parmis les mêmes !!

    Et là je ne vois plus comment faire, agir sur la requete ? dans la boucle ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      2 avril 2011 à 11:17:23

      tu fait un order by prix avec un limit nan?
      • Partager sur Facebook
      • Partager sur Twitter
        2 avril 2011 à 11:29:34

        Oui mais avec ça ça donne :

        SELECT * FROM ... WHERE ... ORDER BY prix ASC LIMIT 0, 1

        Comme cela ça sélectionne L'OEUVRE la moins cher...

        Mais je voudrais que PARMIS les mêmes oeuvres ça affiche la moins cher, tu comprends ?

        Est-ce que c'est possible ?
        • Partager sur Facebook
        • Partager sur Twitter
          2 avril 2011 à 11:57:43

          Il suffit de rajouter une clause WHERE, utilser une sous-requête et min.
          Essaie ça :
          SELECT 
              ce, que, tu, veut 
          FROM oeuvres 
          WHERE 
              tableau = 'blabla' -- Ou autre condition pour s'assurer de récupérer le prix minimum d'UN tableau et pas de tous
              AND prix IN ( 
                  SELECT MIN(prix) FROM oeuvres
              );
          


          PS : ce type de sujet a plus sa place sur le forum "Base de donnée". Tu peut demander un déplacement grâce au lien "Signaler ce sujet aux modérateurs", en choisissant comme motif "Mauvais forum".
          Édition : déplacé par un modérateur, merci :) .
          • Partager sur Facebook
          • Partager sur Twitter
            3 avril 2011 à 12:26:41

            J'ai essayé mais je n'arrive pas très bien à adapter car voilà ma requete :


            Avec cette requete ça sélectionne toutes les oeuvres dans jeu_enchere
            puis ça prend les données dans les divers tables pour afficher les oeuvres...

            Le problème c'est que là ça affiche toutes les enchères, je voudrais que ça affiche, parmis les mêmes oeuvres (donc jeu_enchere.id_oeuvre est le même), je n'affiche que les moins cher !

            Actuellement ça affiche :

            Oeuvres : x1, x2, y1, z1
            Prix : 22, 15, 14, 16

            Et je voudrais que ça affiche ça :

            Oeuvres : x2, y1, z1
            Prix : 15, 14, 16

            car x1 et x2 sont les mêmes et x2 est la moins cher des deux !

            Voilà en espérant que vous ayez compris !

            <?php
            $reponse = $bdd->query('SELECT jeu_enchere.id AS id_enchere, jeu_enchere.prix, jeu_enchere.id_oeuvre, jeu_enchere.timestamp, oeuvres.nom, 
            								joueurs_oeuvres.id, jeu_joueurs.id AS id_joueur_jj, jeu_joueurs.pseudo, jj.id AS id_joueur_jj_de, 
            								jj.pseudo AS pseudo_deux 
            								
            								FROM jeu_enchere
            								
            								LEFT JOIN oeuvres
            								
            								ON oeuvres.id = jeu_enchere.id_oeuvre
            								
            								LEFT JOIN joueurs_oeuvres
            								
            								ON joueurs_oeuvres.id_oeuvre = jeu_enchere.id_oeuvre
            								
            								LEFT JOIN jeu_joueurs
            								
            								ON jeu_joueurs.id = jeu_enchere.id_joueur
            								
            								LEFT JOIN jeu_joueurs jj
            								
            								ON jj.id = jeu_enchere.dernier_encherisseur
            								
            								WHERE joueurs_oeuvres.id_joueur = jeu_enchere.id_joueur
            								
            								ORDER BY jeu_enchere.timestamp ASC');
            								
            								
            		while ($donnees_oeuvres = $reponse->fetch())
            		{
            ?>
            
            • Partager sur Facebook
            • Partager sur Twitter
              3 avril 2011 à 12:49:56

              Dans ce cas, essaie ça :
              SELECT 
                  jeu_enchere.id AS id_enchere, jeu_enchere.prix, jeu_enchere.id_oeuvre, jeu_enchere.timestamp, oeuvres.nom, joueurs_oeuvres.id, jeu_joueurs.id AS id_joueur_jj, jeu_joueurs.pseudo, jj.id AS id_joueur_jj_de, jj.pseudo AS pseudo_deux   
              
              FROM jeu_enchere 
              
              WHERE 
                  jeu_enchere.id_oeuvre = :id
                  AND prix IN ( 
                      SELECT MIN(prix) FROM jeu_enchere
                  )
                  AND joueurs_oeuvres.id_joueur = jeu_enchere.id_joueur
              
              LEFT JOIN oeuvres							
                  ON oeuvres.id = jeu_enchere.id_oeuvre
              								
              LEFT JOIN joueurs_oeuvres							
                  ON joueurs_oeuvres.id_oeuvre = jeu_enchere.id_oeuvre
              								
              LEFT JOIN jeu_joueurs
                  ON jeu_joueurs.id = jeu_enchere.id_joueur
              								
              LEFT JOIN jeu_joueurs jj
                  ON jj.id = jeu_enchere.dernier_encherisseur
              								
              ORDER BY jeu_enchere.timestamp ASC;
              

              PS : Tu utilise un champ nommé timestamp ; c'est un mot réservé par SQL et cela risque de poser des problèmes.
              Un conseil : rennome ce champ (e.g. date_publication ; pas date pour la même raison que timestamp).

              PPS : je viens de m'apercevoir que cette requête ne retourne qu'UN produit : le moins cher...
              Corrige-là en agissant sur la sous-requête (ligne 8-10) :) .
              • Partager sur Facebook
              • Partager sur Twitter
                4 avril 2011 à 12:08:44

                En fait j'ai pris ce que tu m'as passé dans ton premier post et effectivement j'ai rajouté un p'tit WHERE

                SELECT 
                    ce, que, tu, veut 
                FROM oeuvres 
                WHERE 
                    tableau = 'blabla' -- Ou autre condition pour s'assurer de récupérer le prix minimum d'UN tableau et pas de tous
                    AND prix IN ( 
                        SELECT MIN(prix) FROM oeuvres WHERE jeu_enchere.id_oeuvre = joueurs_oeuvres.id_oeuvre
                    );
                


                Et là ça fonctionne !!

                Merci à vous
                • Partager sur Facebook
                • Partager sur Twitter

                Requete sélectionner que les moins cher

                × 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