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 :

Récupérer une variable dans une requête pour faire une 2ème requête


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    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
    Par défaut Récupérer une variable dans une requête pour faire une 2ème requête
    Bonjour,

    Je bute sur un détail en PDO... Je cherche à générer une requête en fonction du résultat d'une première requête.
    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, ce qui donnerait 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).
    Immeuble TRUCMUCHE, 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).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req= $bdd->prepare("SELECT * FROM logements GROUP BY logements.IDimmeubeule ORDER BY ville ASC");
    	  $req->execute();
      	  $result = $req->fetchAll(PDO::FETCH_ASSOC);
    	  $res = $req->fetch();
              $IDimmeuble = $res['IDannonce'];
    	  $req2= $bdd->prepare("SELECT typo, MIN(prixlot) AS prix_mini FROM lots WHERE IDimmeuble = :IDimmeuble GROUP BY typo ORDER BY prix_mini ASC");
    	  $req2->bindValue(':IDimmeuble', '$IDimmeuble', PDO::PARAM_STR);
    	  $req2->execute();
      	  $result2 = $req2->fetchAll(PDO::FETCH_ASSOC);
    Ce code ne renvoie pas la 2ème partie à savoir les logements disponibles par immeuble. Cependant la requête fonctionne pour 1 cas quand je remplace $IDimmeuble par le numéro d'un immeuble au hasard...

    Pouvez-vous m'aider ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il ne faut pas d'apostrophes autour du nom de la variable.
    =>
    Mais sinon ce que tu fais n'est pas bon. Pourquoi il y a t'il besoin de 2 requêtes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    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
    Par défaut
    Merci de ta réponse.
    En fait je me disais qu'il y avait besoin de 2 requêtes, une pour aller chercher chaque immeuble, et une deuxième pour aller chercher les différents types de lots disponibles pour chaque immeuble.
    Je suis preneuse d'une autre solution sachant qu'après avoir fait le tour de MySQL je n'ai pas trouvé de solution, y compris sur ce forum...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Avec ta deuxième requête seule et sans la condition WHERE tu récoltes déjà tous les lots par tous les immeubles.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    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
    Par défaut
    Merci.
    Oui, mais l'objectif est d'aller chercher tous les immeubles dans la base, et d'afficher chaque type de lot disponible dans chaque immeuble avec son prix le plus bas.

    Donc un résultat qui devrait être :

    Immeuble 1 : studio à partir de 100 000 euros, 2 pièces à partir de 150 000 euros
    Immeuble 2 : studio à partir de 110 000 euros, 2 pièces à partir de 160 000 euros
    Immeuble 3 : studio à partir de 120 000 euros, 2 pièces à partir de 170 000 euros
    Immeuble 4 : studio à partir de 130 000 euros, 2 pièces à partir de 180 000 euros

    Sachant que je ne dois afficher qu'une seule ligne par immeuble... D'où mes deux requêtes...

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 814
    Billets dans le blog
    14
    Par défaut
    Ce que vous cherchez à faire est de la cosmétique. Ce n'est pas le boulot du SGBD mais celui de l'application qui présente les données.

    Donc en une requête (celle que je vous avais donnée dans l'autre discussion), vous récupérez tous les lots correspondant à vos critères de recherche :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT immo.id, immo.ville, lots.type_appartement, 
    	MIN(lots.prix) AS prix_mini
    FROM lots
    INNER JOIN immo ON immo.IDimmo = lots.IDimmo
    WHERE immo.ville = :ville_souhaitee -- ou bien immo.ville IN (liste, de, villes, souhaitées)
    GROUP BY immo.id , immo.ville, lots.type_appartement
    ORDER BY immo.ville, lots.type_appartement ASC

    Ensuite, en PHP, vous parcourez le jeu de résultats obtenu pour afficher comme vous souhaitez.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  7. #7
    Membre averti
    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
    Par défaut
    Merci,

    Concernant l'affichage je fais une boucle pour afficher chaque immeuble, mais je n'arrive pas à faire une autre boucle pour afficher les lots disponibles de chaque immeuble sur la même ligne que chaque immeuble.

    Pour afficher une ligne par immeuble, j'utilise foreach, ce qui fonctionne très bien. Mais à l'intérieur de ce "foreach" il faudra que je mette une autre boucle pour afficher les lots concernés par l'immeuble ?

    C'est là où je butte. Je n'arrive pas à trouver la solution pour afficher une ligne par immeuble ET les différents types de lots concernés dans chaque ligne...

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 814
    Billets dans le blog
    14
    Par défaut
    Vite fait, inspire toi de ça :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $sql = "
    	SELECT immo.id, lots.type_appartement, 
    	MIN(lots.prix) AS prix_mini
    	FROM lots
    	INNER JOIN immo ON immo.IDimmo = lots.IDimmo
    	WHERE immo.ville = :ville_souhaitee 
    	GROUP BY immo.id , lots.type_appartement
    	ORDER BY immo.ville, lots.type_appartement ASC
    ";
     
    $stmt = $bdd->prepare($sql);
    $stmt->bindValue(':ville', $ville, PDO::PARAM_STR); // ou PDO::PARAM_INT si la colonne ville est l'identifiant de type entier d'une ville.
    $stmt->execute();
     
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
     
    $id = '';
    $affiche = '';
     
     
    foreach ($result AS $ligne)
    {
    	if ($ligne['id'] != $id)
    	{
    		$id = $ligne['id'];
     
    		$affiche.= '<br />Immeuble '.$id.' : ';
    	}
     
    	$affiche.= $ligne['type_appartement'].' à partir de '.$ligne['prix_mini'].', ';
    }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

Discussions similaires

  1. [XL-2013] Blocage pour faire une somme dans colonne variable
    Par damprt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/01/2016, 16h00
  2. Réponses: 7
    Dernier message: 10/01/2013, 16h39
  3. Réponses: 13
    Dernier message: 09/11/2011, 12h06
  4. Réponses: 4
    Dernier message: 09/02/2006, 15h20
  5. Probleme pour faire une somme dans header ??
    Par snoop57 dans le forum Access
    Réponses: 7
    Dernier message: 01/12/2005, 13h40

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