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 :

Requête SQL tableau 2 dimensions et code php


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 32
    Par défaut Requête SQL tableau 2 dimensions et code php
    Bonjour,

    J'ai besoin de vos lumières. Je n'arrive pas à faire une requête qui en théorie ne doit pas être bien compliqué mais je fais une blocage sur sa création.

    Je souhaite réaliser un tableau en 2 dimensions ressemblant à ceci :


    Requête actuel :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT count(interventions.inter_id) as nb_inter, title, patrimoine.id, ce.nom_ce
    FROM `demandes` 
    LEFT JOIN interventions ON demandes.id = interventions.id_dem
    LEFT JOIN patrimoine ON demandes.site_nv1 = patrimoine.id 
    CROSS JOIN (SELECT id_ce, nom_ce FROM corp_etat) AS ce ON interventions.corp_etat = ce.id_ce
    WHERE parent_id='14' AND secteur='1' AND corp_etat IS NOT NULL 
    GROUP BY site_nv1, ce.id_ce

    Cette requête à pour but de calculer le nombre d'intervention par site et par corp d'état. Seulement si il n'y a pas d'intervention pour un corp d'état mon tableau n'est pas bon. J'ai voulu avec la requête ci-dessus forcer à me donner pour chaque corp_etat le nombre d'interventions même si celui-ci est null mais ça ne fonctionne pas.

    Table corp_etat :


    Extrait table demandes :


    Extrait table patrimoine :


    Extrait table intervensions :


    J'aurai une deuxième question sur la réalisation du code PHP.
    Auriez-vous récupéré les résultats dans des array pour les mettres en forme ou par une autre méthode ?

    Pour ma part j'ai fait cela mais je pense sans me tromper que vous allez dire que c'est pas propre (en plus y'a une erreur car le dernier total n'est pas affiché).

    Code du tableau affiché en haut du sujet :
    Code : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <table border="1" align="center" style="font-size:9pt">
    	<tr>
    		<th>Sites</th>
    		<?php
    		$req_ce = mysql_query ("
    			SELECT id_ce, nom_ce
    			FROM corp_etat");
    		$nb_ce = mysql_num_rows($req_ce);
    		while ($sql_ce = mysql_fetch_array($req_ce)){
    			echo '<th style="padding: .5em">'.$sql_ce['nom_ce'].'</th>';
    		}
    		?>
    		<th>TOTAL</th>
    	</tr>
    	<?php
    	$snv1 = "";
    	$nb_inter_total_snv1 = 0;
    	//$array_snv1 = array();
    	//$array_test = array();
    	$req_snv1 = mysql_query ("
    		SELECT count(interventions.inter_id) as nb_inter, title, patrimoine.id, ce.nom_ce
    		FROM `demandes` 
    		LEFT JOIN interventions ON demandes.id = interventions.id_dem
    		LEFT JOIN patrimoine ON demandes.site_nv1 = patrimoine.id 
    		CROSS JOIN (SELECT id_ce, nom_ce FROM corp_etat) AS ce ON interventions.corp_etat = ce.id_ce
    		WHERE parent_id='14' AND secteur='1' AND corp_etat IS NOT NULL 
    		GROUP BY site_nv1, ce.id_ce");
    	while ($sql_snv1 = mysql_fetch_array($req_snv1)){
    		//$array_test[] = $sql_snv1;
    		//array_push ($array_snv1, $sql_snv1['nb_inter']);		
    		if ($snv1<>"" AND $snv1<>$sql_snv1['id']) {
    			echo '<td align="center"><b>'.$nb_inter_total_snv1.'</b></td>';
    			$nb_inter_total_snv1 = 0;
    			echo '</tr>';			
    		}
    		if ($snv1<>$sql_snv1['id']){
    			echo '<tr>';
    				echo '<td><b>'.$sql_snv1['title'].'</b></td>';
    				echo '<td align="center">'.$sql_snv1['nb_inter'].'</td>';
    				$nb_inter_total_snv1 = $nb_inter_total_snv1+$sql_snv1['nb_inter'];
    		} else {
    			echo '<td align="center">'.$sql_snv1['nb_inter'].'</td>';
    			$nb_inter_total_snv1 = $nb_inter_total_snv1+$sql_snv1['nb_inter'];
    		}		
    		$snv1 = $sql_snv1['id'];
    	}
    	//print_r($array_snv1);
    	//print_r($array_test);
    	?>
    </table>
    D'avance merci à ceux qui auront pris le temps de lire ce message.

  2. #2
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Seulement si il n'y a pas d'intervention pour un corp d'état mon tableau n'est pas bon
    dans ce cas là, il faut réaliser une jointure externe

    Explication ici

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 32
    Par défaut
    Merci pour cette première réponse Andaman, seulement j'ai beau mettre des LEFT JOIN, RIGHT JOIN, le résultat reste le même.

    J'obtient 47 résultats sur les 48 que je devrais avoir vu que pour un site je n'ai eu aucune intervention de chauffage.

    Capture du résultat de la requête

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Jointure externe, on a dit : LEFT OUTER JOIN ou RIGHT OUTER JOIN

    Attention, il faut partir de la table pour laquelle il y a des valeurs et faire la jointure vers la table pour laquelle il peut y avoir des résultats null.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 32
    Par défaut
    Merci Célira.

    J'avais bien fait mes tests avec le OUTER mais ça n'avait rien changé.

    Je viens de ré-écrire la requête dans l'autre sens comme tu me l'a rappelé mais le résultat reste identique

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT count(interventions.inter_id) as nb_inter, title, patrimoine.id, corp_etat.nom_ce, corp_etat.id_ce
    FROM corp_etat
    RIGHT OUTER JOIN interventions ON corp_etat.id_ce = interventions.corp_etat
    RIGHT OUTER JOIN demandes ON interventions.id_dem = demandes.id
    RIGHT OUTER JOIN patrimoine ON demandes.site_nv1 = patrimoine.id 
    WHERE patrimoine.parent_id='14' AND demandes.secteur='1' AND interventions.corp_etat IS NOT NULL 
    GROUP BY demandes.site_nv1, corp_etat.id_ce
    47 résultats au lieu de 48.

    J'ai fait le test également en LEFT OUTER sans différence de résultat.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 32
    Par défaut
    Y'a t'il quelque chose que je fais mal dans l'élaboration de ma requête ou je n'ai pas compris ce que vous avez essayé de m'expliquer ?

Discussions similaires

  1. Insérer un tableau html dans le code php
    Par paolo129 dans le forum Langage
    Réponses: 3
    Dernier message: 06/03/2009, 08h50
  2. [PostgreSQL] SQL DB_query Segmentation fault dans code PHP
    Par diabli73 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/11/2008, 12h59
  3. [PHP-JS] utiliser un tableau javascript dans un code php
    Par lenstoi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/08/2007, 13h50
  4. [SQL] Tableau à 2 dimensions
    Par lenstoi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/08/2007, 00h47
  5. requête sql + tableau d'analyse
    Par heteroclite dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/09/2006, 14h11

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