Vous n'êtes pas identifié(e).

#1 01/04/2010 09:52:27

mamatt
Membre

PHP/SQL requete avec jointure de table

Bonjour, alors j'ai un petit souci plus dans la construction de ma requête que dans mon code php, je travail avec wamp 2 et phppgadmin, postgresql et en PDO

J'ai 3 tables : zone_activite, parcelle, bâtiments,

Chaque table contient  un champ id en serial , et la table parcelles a en plus le champs id_zone_activite, qui contient l'id de la za dans laquelle se situe la parcelle, et la table bâtiments a en plus le champs id_parc, qui contient l'id de la parcelle dans laquelle se situe le bâtiment.

Je souhaite compter le nombre total de bâtiments par zone_activite.

et je n'arrive pas a faire cette requete!!

j'arrive a compter le nombre de parcelle par zone d'activité en faisant la requête suivante :

<?php
$nbreparc = $bdd->prepare('SELECT COUNT(id_parc) AS nbre_parc FROM parcelles WHERE id_zone_activite = ?') or die(print_r($bdd->errorInfo()));// on compte le nombre de parcelles lorsque le champ id_zone_activité = l'id de la za
$nbreparc->execute(array($_GET['info_za'])); // id de la za récupéré via l'url
$donnees_parc = $nbreparc->fetch() ; // on tri les données récupérées
echo 'Nombre total de parcelles de la za : '.$donnees_parc['nbre_parc'].''; // on affiche le nombre de parcelles
$nbreparc->closeCursor(); // Termine le traitement de la requête
?>

je n'arrive pas a compter le nombre de batiments, qui sont dans les parcelles de la za!!! j'ai essayé ceci mais cela ne fonctionne pas :

<?php
$idparc = $bdd->prepare('SELECT id_parc FROM parcelles WHERE id_zone_activite = ?') or die(print_r($bdd->errorInfo()));// on récupere les valeurs de l'id de toute les parcelles pour faire la jointure avec la table des batiments
$idparc->execute(array($_GET['info_za']));
$donnees_nomparc = $idparc->fetch();// on tri les données récupérées

$nbrebati = $bdd->prepare('SELECT COUNT(id_bati) AS nbre_bati FROM batiments WHERE id_parcelle = ?') or die(print_r($bdd->errorInfo())); // on compte le nombre de ligne où l'id_parcelle = l'id_parc récuperer par la requete précédente
$nbrebati->execute(array($donnees_nomparc['id_parc'])); / on tri les données récupérées
$donnees_bati = $nbrebati->fetch();

echo 'Nombre total de batiments de la za: '.$donnees_bati['nbre_bati'].''; // on affiche le résultat
?>

Une idée??

Hors ligne

#2 01/04/2010 14:12:45

Marc Cousin
Membre

Re : PHP/SQL requete avec jointure de table

Vous avez une erreur ? Quelle est la requête finalement envoyée à PostgreSQL ?


Marc.

Hors ligne

#3 01/04/2010 16:40:17

gleu
Administrateur

Re : PHP/SQL requete avec jointure de table

Un

SELECT COUNT(*) AS nbre_bati FROM batiments WHERE id_parcelle IN (SELECT id_parc FROM parcelles WHERE id_zone_activite = ?)

ne serait pas mieux ?


Guillaume.

Hors ligne

#4 07/04/2010 11:53:25

mamatt
Membre

Re : PHP/SQL requete avec jointure de table

Désolé pour la réponse tardive. Merci pour votre réponse, j'ai lu des explications sur les jointures sql, et j'ai cette requete qui marche très bien :

$nbrebati = $bdd->prepare('SELECT count(*) AS nbre_bati FROM batiments b JOIN parcelles p ON (b.id_parcelle=p.id_parc)  WHERE p. id_parc = ?');
$nbrebati->execute(array($_GET['info_parc']));

mais j'ai tester aussi le code de gleu, qui marche.

Merci problème résolu et mes connaissances en sql améliorées.

Hors ligne

Pied de page des forums