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

Langage SQL Discussion :

Sélection plusieurs valeurs minimum dans BDD


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Entrepreneur
    Inscrit en
    Juillet 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Entrepreneur

    Informations forums :
    Inscription : Juillet 2015
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Sélection plusieurs valeurs minimum dans BDD
    Bonjour,

    Je bute sur un code SQL...
    En effet j'ai dans ma base de données une table Immo, qui contient des immeubles, et une table lots, qui contient chaque appartement à vendre contenu dans ces immeubles. La jointure est faite sur le champ IDimmo, identité de l'immeuble.
    Dans un formulaire de recherche en PHP / Mysql, j'aimerais rechercher les logements disponibles. Or, je ne dois afficher comme résultat qu'une ligne par immeuble, et cette ligne doit contenir les prix minimum de chaque typologie de logement disponible dans cet immeuble.

    Autrement dit, si je recherche un 2 et un 3 pièces et qu'il y en a plusieurs de disponibles dans un même immeuble, je dois avoir une seule ligne de réponse, contenant par exemple :
    Immeuble TARTENPION, 2 pièces à partir de (prix du 2 pièces le moins cher), 3 pièces à partir de (prix du 3 pièces le moins cher).

    A ce stade, on code SQL ressemble à ça et affiche bien une seule ligne par immeuble dans lequel des logements sont à vendre, mais je n'arrive pas à y inclure un code pour sélectionner le prix minimum de chaque typologie de logement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM lots INNER JOIN immo ON immo.IDimmo = lots.IDimmo GROUP BY lots.IDimmo ORDER BY ville ASC
    Sauriez-vous m'aider ?

    Merci ...

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 13
    Points
    13
    Par défaut
    Salut,

    Je ne pense pas que le SQL soit la meilleure solution. En php ce serait plus simple à mon avis.

    Quand tu parcours ton ensemble de résultats, tant que l'ID de l'immeuble est le même tu écris tes données sur la même ligne, et quand l'ID change tu fais un retour à la ligne. Ainsi tu auras 1 immeuble par ligne, et tous les lots de l'immeuble sur la même ligne.
    Je ne sais pas si je suis clair...

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    J'imagine que tu travailles avec MySQL, car ta requête est syntaxiquement incorrecte...
    Elle devrait plutôt ressembler à ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select lots.id,immo.id,immo.ville,min(prix)
    from lots
    INNER JOIN immo ON immo.IDimmo = lots.IDimmo
    GROUP BY lots.id,immo.id,immo.ville
    ORDER BY ville ASC
    Il nous manque le descriptif des tables, donc je suis parti sur des suppositions...
    Le reste n'est ensuite que de la présentation, comme l'a indiqué Altilus.

    Tatayo.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ccccc77
    une table Immo, qui contient des immeubles, et une table lots, qui contient chaque appartement à vendre contenu dans ces immeubles
    Vu que la "table lots contient chaque appartement à vendre", la requête de Tatayo groupant par lots.id va donner... tous les appartements !

    Sans connaître la description des tables, je vois plutôt un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT immo.id , immo.ville, lots.type_appartement, 
    	MIN(lots.prix) AS prix_mini
    FROM lots
    INNER JOIN immo ON immo.IDimmo = lots.IDimmo
    GROUP BY immo.id , immo.ville, lots.type_appartement
    ORDER BY immo.ville, lots.type_appartement ASC
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Femme Profil pro
    Entrepreneur
    Inscrit en
    Juillet 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Entrepreneur

    Informations forums :
    Inscription : Juillet 2015
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Merci de vos réponses !

    Oui je travaille avec Mysql.
    La solution fonctionne de Cinephil fonctionne, sauf qu'elle amène une ligne par type d'appartement... L'objectif serait d'avoir une ligne par immeuble, et que dans cette ligne apparaissent l'appartement le moins cher par typologie, du genre

    Immeuble 1 : 2 pièces à partir de xx euros, 3 pièces à partir de xx euros...
    Immeuble 2 : 2 pièces à partir de xx euros, 3 pièces à partir de xx euros...
    Immeuble 3 : 2 pièces à partir de xx euros, 3 pièces à partir de xx euros...


    Je m'arrache les cheveux...

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    A ce niveau, cela est plus du domaine de la mise en forme que de la manipulation de données.
    Avec un autre SGBD, on ferait un PIVOT sur le type d'appartement. Malheureusement MySQL ne connait pas cette instruction.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    comme déjà dit, il serait sans doute préférable de regrouper coté PHP.

    vous pouvez toutefois, à partir de la requete de Cinéphil, effectuer le regroupement sous MySQL directement je pense

    quelque chose comme ceci (pas testé et sans doute à adapter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT 
            id
        ,   GROUP_CONCAT(CONCAT(type_appartement, ' : ', prix_mini) )
    FROM (
        SELECT immo.id , immo.ville, lots.type_appartement, 
        	MIN(lots.prix) AS prix_mini
        FROM lots
        INNER JOIN immo ON immo.IDimmo = lots.IDimmo
        GROUP BY immo.id , immo.ville, lots.type_appartement
    ) T
    GROUP BY id

  8. #8
    Membre à l'essai
    Femme Profil pro
    Entrepreneur
    Inscrit en
    Juillet 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Entrepreneur

    Informations forums :
    Inscription : Juillet 2015
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Merci, je suis en train de trouver une solution en PDO effectivement...Mysql semble avoir ses limites...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2015, 15h31
  2. Valeur minimum dans un TChart
    Par looping dans le forum Composants VCL
    Réponses: 5
    Dernier message: 25/10/2007, 21h58
  3. Réponses: 1
    Dernier message: 07/08/2007, 09h06
  4. Réponses: 16
    Dernier message: 19/07/2006, 00h16
  5. plusieurs valeur(s) dans l'url
    Par philippe123 dans le forum ASP
    Réponses: 6
    Dernier message: 04/08/2005, 09h08

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