Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2008, 12h26   #1
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Par défaut [SQL] Requête SELECT et INNER JOIN

Bonjour,

Pour info j'utilise php 5 et mysql 5.0.41.

Mon problème est le suivant je souhaite afficher les résultats de la table tarifs tout en affichant des infos de 3 autres tables donc j'ai fait ma requête avec des INNER JOIN seulement problème ça me fait un produit cartésien entre tous les champs de mes tables.

Voici ma requête :

Code :
1
2
3
4
5
6
 
$affiche = mysql_query("SELECT * FROM Tarif T 
                       INNER JOIN Saison S ON T.id_saison = S.id_s 
                       INNER JOIN Duree D ON T.id_duree = D.id_d 
                       INNER JOIN Categorie C ON T.id_categorie = C.id_c") 
                       or die ('Erreur<br>'.$affiche.'<br>'.mysql_error());
Pour info si je rajoute le mot clef DISTINCT ça ne change rien.

Merci d'avance
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 18h03   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
A priori, ta requête est OK. Combien as-tu de lignes dans chaque table ? Combien en obtiens-tu dans ta requête ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 18h32   #3
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Nombre d'enregistrement :

Table Tarif : 192
Table Saison : 6
Table Duree : 8
Table Categorie : 6


Nombre qui sort de la requête :

Table Tarif : 128
Table Saison : 128
Table Duree : 128
Table Categorie : 128

pour obtenir les résultats j'ai fais ça :

Code :
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
 
$affiche = mysql_query("SELECT * FROM Tarif T 
                       INNER JOIN Saison S ON T.id_saison = S.id_s 
                       INNER JOIN Duree D ON T.id_duree = D.id_d 
                       INNER JOIN Categorie C ON T.id_categorie = C.id_c") 
                       or die ('Erreur<br>'.$affiche.'<br>'.mysql_error());
while($row = mysql_fetch_assoc($affiche)){
    //Recup info saison
    $tab['id_s'][] = $row['id_s'];
    $tab['nom_saison'][] = $row['nom_saison'];
    $tab['lim_basse'][] = $row['lim_basse'];
    $tab['lim_haute'][] = $row['lim_haute'];
    //Recup info duree
    $tab['id_d'][] = $row['id_d'];
    $tab['nom_duree'][] = $row['nom_duree'];
    $tab['lim_duree_basse'][] = $row['lim_duree_basse'];
    $tab['lim_duree_haute'][] = $row['lim_duree_haute'];
    //Recup info categorie
    $tab['id_c'][] = $row['id_c'];
    $tab['nom_categorie'][] = $row['nom_categorie'];
    //Recup info tarif
    $tab['id_t'][] = $row['id_t'];
    $tab['id_saison'][] = $row['id_saison'];
    $tab['id_duree'][] = $row['id_duree'];
    $tab['id_categorie'][] = $row['id_categorie'];
    $tab['loca_tarif'][] = $row['loca_tarif'];
}
$Nb_saison = count($tab['id_s']);
$Nb_duree = count($tab['id_d']);
$Nb_categorie = count($tab['id_c']);
$Nb_tarif = count($tab['id_t']);
?>
<div>
<?php
echo 'Nb_saison : '.$Nb_saison.'<br />';
echo 'Nb_duree : '.$Nb_duree.'<br />';
echo 'Nb_categorie : '.$Nb_categorie.'<br />';
echo 'Nb_tarif : '.$Nb_tarif.'<br />';
?>
</div>
Je comprends pas pourquoi j'ai ce genre de résultat et ce qui cloche dans ma requête.

En attendant pour que ça marche j'ai du faire 4 requêtes SQL différente mais j'aimerai bien optimiser en une seule requête si c'est possible

Merci d'avance
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 21h08   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Un produit cartésien, c'est quand tu as toutes les combinaison entre toutes les lignes de toutes tes tables, ce qui te ferait 192 * 6 * 8 * 6 soit 55 296 lignes.

Quel résultat obtiens-tu, et qu'est qui te semble clocher ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 21h44   #5
Membre éclairé
 
Avatar de makmaoui
 
Développeur Web
Inscription : mai 2007
Messages : 282
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2007
Messages : 282
Points : 361
Points : 361
Salut,

ta jointure ne te renverra que les enregistrements présents dans les 4 tables : par exemple si un tarif a une saison qui n'est pas dans la table saison OU s'il n'en a pas du tout il ne sera pas dans le résultat de la requête ... Si tu veux y arriver il va falloir faire des jointures gauche et droite .... Si tu fais un "count(*)" sur chaque table, cela sera moins lourd et plus clair.
makmaoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 22h26   #6
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Ben c'est simple

regarde mes test :

Affichage avec 4 requêtes : http://location-voiture.creation3w.com/test/test-1.php

Affichage avec la requête SQL que j'ai marqué plus haut
http://location-voiture.creation3w.com/test/test-2.php


Pour moi ça fait un produit cartésien non ce que je souhaite c'est de pouvoir avoir un affichage correcte avec une seul requête mais là j'en suis loin.

Vous avez une idée pourquoi ça fait ça ?

Code source complet avec les 4 requete SQL
Code :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ajout Des Tarif</title>
<style type="text/css" media="all">
@import url(style.css);
</style>
 
</head>
 
<body bgcolor="#677BAD">
<div id="titre">
TEST 4 requêtes SQL
</div>
<div id="conteneur2">
    <div id="contenu">
<?php
include('sql/conf.php');
include('inc/gomonth.php');
$afficheSaison = mysql_query("SELECT * FROM Saison S order by S.id_s ASC") or die (mysql_error());
$afficheDuree = mysql_query("SELECT * FROM Duree D order by D.id_d ASC") or die (mysql_error());
$afficheCategorie = mysql_query("SELECT * FROM Categorie C order by C.nom_categorie ASC") or die (mysql_error());
$afficheTarif = mysql_query("SELECT * FROM Tarif T order by T.id_t ASC") or die (mysql_error());
while($rowS = mysql_fetch_assoc($afficheSaison)){
    //Recup info saison
    $tab['id_s'][] = $rowS['id_s'];
    $tab['nom_saison'][] = $rowS['nom_saison'];
    $tab['lim_basse'][] = $rowS['lim_basse'];
    $tab['lim_haute'][] = $rowS['lim_haute'];
}
while($rowD = mysql_fetch_assoc($afficheDuree)){
    //Recup info duree
    $tab['id_d'][] = $rowD['id_d'];
    $tab['nom_duree'][] = $rowD['nom_duree'];
    $tab['lim_duree_basse'][] = $rowD['lim_duree_basse'];
    $tab['lim_duree_haute'][] = $rowD['lim_duree_haute'];
}
while($rowC = mysql_fetch_assoc($afficheCategorie)){
    //Recup info categorie
    $tab['id_c'][] = $rowC['id_c'];
    $tab['nom_categorie'][] = $rowC['nom_categorie'];
}
while($rowT = mysql_fetch_assoc($afficheTarif)){
    //Recup info tarif
    $tab['id_t'][] = $rowT['id_t'];
    $tab['id_saison'][] = $rowT['id_saison'];
    $tab['id_duree'][] = $rowT['id_duree'];
    $tab['id_categorie'][] = $rowT['id_categorie'];
    $tab['loca_tarif'][] = $rowT['loca_tarif'];
}
$Nb_saison = count($tab['id_s']);
$Nb_duree = count($tab['id_d']);
$Nb_categorie = count($tab['id_c']);
?>
<div id="visualisation3">
<?php
$i=0;
for($i=0; $i<$Nb_saison; $i++){
?>
    <table cellpadding="7" cellspacing="0" border="1" width="100%" align="center">
    <tr>
    <td align="center" class="headtable2" colspan="<?php echo ($Nb_duree+1);?>">
    <?php echo $tab['nom_saison'][$i].' : du '.toSql($tab['lim_basse'][$i]).' au '.toSql($tab['lim_haute'][$i]); ?>
    </td>
    </tr><tr>
    <td align="center" class="headtable3">Cat&eacute;gories</td>
    <?php
    for($j=0; $j<$Nb_duree; $j++){
        echo '<td align="center" class="headtable3">'.$tab['nom_duree'][$j].'</td>';
    } //Fin de la boucle j pour les tranches de durée
    ?>
    </tr>
    <?php
    if(!isset($m)){
        $m = 0;
    }
    for($k=0; $k<$Nb_categorie; $k++){
        echo '<tr><td align="center" class="headtable3">'.$tab['nom_categorie'][$k].'</td>';
        for($l=0; $l<$Nb_duree; $l++){
            echo '<td align="center" class="colorcell">'.$tab['loca_tarif'][$m].' &euro;</td>';
        $m++;
        } //Fin de la boucle l pour les cellules
        echo '</tr>';
    } // Fin de la boucle k pour les catégories
    ?>
    </table>
    <br /><br />
<?php
} //Fin de la boucle i pour les saisons
?>
</div>
    </div>
</div>
</body>
</html>
Code source complet avec une seul requête sql
Code :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ajout Des Tarif</title>
<style type="text/css" media="all">
@import url(style.css);
</style>
</head>
 
<body bgcolor="#677BAD">
<div id="titre">
TEST une requête SQL
</div>
<div id="conteneur2">
    <div id="contenu">
<?php
include('sql/conf.php');
include('inc/gomonth.php');
 
$affiche = mysql_query("SELECT * FROM Tarif T 
                       INNER JOIN Saison S ON T.id_saison = S.id_s 
                       INNER JOIN Duree D ON T.id_duree = D.id_d 
                       INNER JOIN Categorie C ON T.id_categorie = C.id_c") 
                       or die ('Erreur<br>'.$affiche.'<br>'.mysql_error());
while($row = mysql_fetch_assoc($affiche)){
    //Recup info saison
    $tab['id_s'][] = $row['id_s'];
    $tab['nom_saison'][] = $row['nom_saison'];
    $tab['lim_basse'][] = $row['lim_basse'];
    $tab['lim_haute'][] = $row['lim_haute'];
    //Recup info duree
    $tab['id_d'][] = $row['id_d'];
    $tab['nom_duree'][] = $row['nom_duree'];
    $tab['lim_duree_basse'][] = $row['lim_duree_basse'];
    $tab['lim_duree_haute'][] = $row['lim_duree_haute'];
    //Recup info categorie
    $tab['id_c'][] = $row['id_c'];
    $tab['nom_categorie'][] = $row['nom_categorie'];
    //Recup info tarif
    $tab['id_t'][] = $row['id_t'];
    $tab['id_saison'][] = $row['id_saison'];
    $tab['id_duree'][] = $row['id_duree'];
    $tab['id_categorie'][] = $row['id_categorie'];
    $tab['loca_tarif'][] = $row['loca_tarif'];
}
$Nb_saison = count($tab['id_s']);
$Nb_duree = count($tab['id_d']);
$Nb_categorie = count($tab['id_c']);
$Nb_tarif = count($tab['id_t']);
?>
<div id="visualisation3">
<?php
$i=0;
for($i=0; $i<$Nb_saison; $i++){
?>
    <table cellpadding="7" cellspacing="0" border="1" width="100%" align="center">
    <tr>
    <td align="center" class="headtable2" colspan="<?php echo ($Nb_duree+1);?>">
    <?php echo $tab['nom_saison'][$i].' : du '.toSql($tab['lim_basse'][$i]).' au '.toSql($tab['lim_haute'][$i]); ?>
    </td>
    </tr><tr>
    <td align="center" class="headtable3">Cat&eacute;gories</td>
    <?php
    for($j=0; $j<$Nb_duree; $j++){
        echo '<td align="center" class="headtable3">'.$tab['nom_duree'][$j].'</td>';
    } //Fin de la boucle j pour les tranches de durée
    ?>
    </tr>
    <?php
    if(!isset($m)){
        $m = 0;
    }
    for($k=0; $k<$Nb_categorie; $k++){
        echo '<tr><td align="center" class="headtable3">'.$tab['nom_categorie'][$k].'</td>';
        for($l=0; $l<$Nb_duree; $l++){
            echo '<td align="center" class="colorcell">'.$tab['loca_tarif'][$m].' &euro;</td>';
        $m++;
        } //Fin de la boucle l pour les cellules
        echo '</tr>';
    } // Fin de la boucle k pour les catégories
    ?>
    </table>
    <br /><br />
<?php
} //Fin de la boucle i pour les saisons
?>
</div>
    </div>
</div>
</body>
</html>
Voilà merci
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 23h19   #7
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Pourquoi tu me dis 128 lignes alors qu'il y en a quasiment assez pour crasher mon Mozilla ?

tu ne peux pas juste faire un mysql_num_rows() après exécuté ta requête ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 08h33   #8
Membre du Club
 
Ingénieur d'études et développement
Inscription : décembre 2005
Messages : 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études et développement

Informations forums :
Inscription : décembre 2005
Messages : 109
Points : 55
Points : 55
Envoyer un message via MSN à estacado
Oui ou simplement un

Code :
1
2
3
4
5
SELECT count(*) 
FROM Tarif T 
     INNER JOIN Saison S ON T.id_saison = S.id_s 
     INNER JOIN Duree D ON T.id_duree = D.id_d 
     INNER JOIN Categorie C ON T.id_categorie = C.id_c
estacado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 21h20   #9
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Pourquoi je disais 128 tous simplement parce que ça me dis 128 lol c'est ça qui est bizarre

voici ce que j'ai fais pour avoir 128 :

1er test :

Code :
1
2
3
4
5
6
7
 
$affiche = mysql_query("SELECT * FROM Tarif T 
                       INNER JOIN Saison S ON T.id_saison = S.id_s 
                       INNER JOIN Duree D ON T.id_duree = D.id_d 
                       INNER JOIN Categorie C ON T.id_categorie = C.id_c") 
                       or die ('Erreur<br>'.$affiche.'<br>'.mysql_error());
echo mysql_num_rows($affiche);
ça donne 128

2ème test de fait
Code :
1
2
3
4
5
6
7
8
 
$affiche = mysql_query("SELECT count(*) 
FROM Tarif T 
     INNER JOIN Saison S ON T.id_saison = S.id_s 
     INNER JOIN Duree D ON T.id_duree = D.id_d 
     INNER JOIN Categorie C ON T.id_categorie = C.id_c");
$count= mysql_fetch_row($affiche);
echo $count[0];
Donne aussi 128

bizarre non ?

Bon ceci dis ça c'est bizarre certes mais que dois-je modifier sur ma requête pour que ça n'affiche pas 50000 résultats avec des doublons ?

En fait faudrai arrivé à faire des 4 requêtes sql que j'ai mis dans mon post précédent en une seule si c'est possible

Merci
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 22h36   #10
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Je pense que ta requête est parfaitement OK, mais que c'est ton code PHP qui est dingue.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 12h29   #11
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Je veux bien remettre en cause mon code php mais je vais vous l'expliquer avant.

Il y a 4 boucles :

La première boucle permet de faire autant de tableau qu'il y a de saison.

La seconde me permet de faire autant de colonnes qu'il y a de tranches de durée dans une saison.

La troisième et la quatrième marchant ensemble me permet de faire autant de ligne qu'il y a de catégorie tout en remplissant les cellules par rapport au nombre de tranche de durée tout en incrémentant la variable $m afin de prendre les résultats de la requêtes SQL (Les tarifs en l'occurrence).

Je ne pense pas que je puisse réellement faire autrement que de faire 4 boucles afin de construire mes différents tableaux, de plus si mon code php était si dingue que ça pourquoi es ce qu'il marche parfaitement avec mes 4 requêtes SQL que j'ai poster plus haut et pourquoi il ne marcherai pas lorsque je fais une seul requête?

Autre point je doute que ma requête SQL qui regroupe les 4 requêtes en une soit correcte car ça ne retourne que 128 hors dans la table tarifs je rappel que j'ai 192 résultats donc il manques forcement de plus si je fais un count sur les autres tables j'ai 128 partout alors que les autres table possède 6 - 8 et 6 enregistrement il y a forcement une erreur quelque part ou alors ma requête est correcte mais elle ne sert pas à faire ce que je veux.

Ce que je souhaite c'est d'afficher les tarifs de la table Tarifs cette tables est composé des champs id_t (auto incrément de la table tarif), id_saison (correspondant à id_s de la saison), id_duree(correspondant à id_d de la table duree), id_categorie(correspondant à id_c de la table categorie), et du champ loca_tarif (c'est les tarifs).

donc ce que je veux faire vous devez le devinez c'est d'afficher les tarifs tout en récupérant les infos des tables relative à chaque id.

Exemple l'enregistrement suivant de la table tarifs :

id_t id_saison id_duree id_categorie loca_tarif
1 1 2 1 30

donc je veux recupérer l'enregistrement où l'id_s correspond à 1 pour la table saison où id_d correspond à 2 pour la table duree et où id_c correspond à 1 pour la table categorie ect ect ect ....

ce qui signifie que la requête SQL suivante :

Code :
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
 
<?php
$afficheSaison = mysql_query("SELECT * FROM Saison S order by S.id_s ASC") or die (mysql_error());
$afficheDuree = mysql_query("SELECT * FROM Duree D order by D.id_d ASC") or die (mysql_error());
$afficheCategorie = mysql_query("SELECT * FROM Categorie C order by C.nom_categorie ASC") or die (mysql_error());
$afficheTarif = mysql_query("SELECT * FROM Tarif T order by T.id_t ASC") or die (mysql_error());
while($rowS = mysql_fetch_assoc($afficheSaison)){
    //Recup info saison
    $tab['id_s'][] = $rowS['id_s'];
    $tab['nom_saison'][] = $rowS['nom_saison'];
    $tab['lim_basse'][] = $rowS['lim_basse'];
    $tab['lim_haute'][] = $rowS['lim_haute'];
}
while($rowD = mysql_fetch_assoc($afficheDuree)){
    //Recup info duree
    $tab['id_d'][] = $rowD['id_d'];
    $tab['nom_duree'][] = $rowD['nom_duree'];
    $tab['lim_duree_basse'][] = $rowD['lim_duree_basse'];
    $tab['lim_duree_haute'][] = $rowD['lim_duree_haute'];
}
while($rowC = mysql_fetch_assoc($afficheCategorie)){
    //Recup info categorie
    $tab['id_c'][] = $rowC['id_c'];
    $tab['nom_categorie'][] = $rowC['nom_categorie'];
}
while($rowT = mysql_fetch_assoc($afficheTarif)){
    //Recup info tarif
    $tab['id_t'][] = $rowT['id_t'];
    $tab['id_saison'][] = $rowT['id_saison'];
    $tab['id_duree'][] = $rowT['id_duree'];
    $tab['id_categorie'][] = $rowT['id_categorie'];
    $tab['loca_tarif'][] = $rowT['loca_tarif'];
}
$Nb_saison = count($tab['id_s']);
$Nb_duree = count($tab['id_d']);
$Nb_categorie = count($tab['id_c']);
?>
Je souhaite si c'est possible la convertir en une seule requête

Dîtes moi si je ne suis pas clair mais je pense que le plus simple pour comprendre est de lire mes 4 requêtes ci-dessus et ce que je veux c'est en faire qu'une.

Merci d'avance
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 16h33   #12
Membre éclairé
 
Homme Damien Attanasio
Développeur informatique
Inscription : février 2007
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme Damien Attanasio
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2007
Messages : 340
Points : 307
Points : 307
On va commencer par le commencement
Que doit te retourner exactement ta requete ? Que veux tu afficher ?

A ce que j'ai compris tu veux afficher ta liste de tarif, c'est a dire 192 résultats avec les données des autres tables qui s'y rattachent.
madevilts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 10h20   #13
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Oui c'est exactement ça en fait tu peux voir ce que je veux afficher ici :

http://location-voiture.creation3w.com/test/test-1.php

Ce que tu vois sur cette page c'est mon test avec les 4 requêtes SQL.

De plus sur cette page :

http://location-voiture.creation3w.com/test/test-2.php

Attention à ton navigateur ça risque de planté on peut voir que ma requête SQL déconne.

PS : J'ai essayé la requête suivante :

Code :
1
2
3
4
5
6
 
$affiche = mysql_query("SELECT * FROM Tarif T 
                       LEFT JOIN Saison S ON T.id_saison = S.id_s 
                       LEFT JOIN Duree D ON T.id_duree = D.id_d 
                       LEFT JOIN Categorie C ON T.id_categorie = C.id_c") 
                       or die ('Erreur<br>'.$affiche.'<br>'.mysql_error());
ça marche pas c'est l'affichage que vous avez sur la page test-2.php

Merci
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 10h44   #14
Membre éclairé
 
Homme Damien Attanasio
Développeur informatique
Inscription : février 2007
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme Damien Attanasio
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2007
Messages : 340
Points : 307
Points : 307
Ah oui effectivement, il y a un léger souci. Es tu sur que ce n'est pas ta boucle a l'affichage qui déconne ? As tu passé ta requete dans phpmyadmin pour voir ce que ça retourne ?
madevilts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 11h00   #15
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Bien pensé l'idée de voir ce que ça donne dans PhpMyAdmin, avec Left Join tel que j'ai écrit la requête plus haut ça me donne pile ce que je veux . La chose que je n'avais pas compris c'est que ça me les tris directement ce qui fait que j'ai plus besoin de boucle.

Je vais devoir faire un Flag pour finir les ligne et finir les tableaux.

Merci

Je mettrais mon code php terminer dans l'après midi une fois que je l'aurai
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 11h08   #16
Membre éclairé
 
Homme Damien Attanasio
Développeur informatique
Inscription : février 2007
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme Damien Attanasio
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2007
Messages : 340
Points : 307
Points : 307
Le coup de tester dans phpmyadmin c'est toujours un bon test.
Pour ma part, dès qu'une requete marche pas, je la colle dans phpmyadmin ou sqldeveloper (oracle, mysql) et je vérifie qu'il est correct.

On pense trop souvent que le php est en cause alors que c'est le SQL qui fait n'importe quoi. Dans ton cas, c'est l'inverse mais ça t'a permis de voir ou était ton erreur
madevilts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 12h09   #17
Candidat au titre de Membre du Club
 
Webmaster
Inscription : décembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : décembre 2006
Messages : 57
Points : 13
Points : 13
Envoyer un message via MSN à polemoss Envoyer un message via Skype™ à polemoss
Bon ben tout ça pour rien

Car lorsque je fais ma requête avec les left join ont à vu plus haut que ça me retourner les bon résultat le problème c'est que je ne peux pas utilisé les résultat pour fabriquer mon tableau.

Un tableau ce fait ligne par ligne en remplissant chaque cellule et c'est pas jouable je pensais simplifier en faisant une requête mais en faite c'est l'inverse dommage.

Enfin si qqun voit comment faire je suis quand même preneur

Merci encore pour votre aide

A+
polemoss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 12h30   #18
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par polemoss Voir le message
Un tableau ce fait ligne par ligne en remplissant chaque cellule et c'est pas jouable je pensais simplifier en faisant une requête mais en faite c'est l'inverse dommage.
PHP lira les résultats ligne à ligne en remplissant chaque cellule. Où est le problème ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 14h11   #19
Membre éclairé
 
Homme Damien Attanasio
Développeur informatique
Inscription : février 2007
Messages : 340
Détails du profil
Informations personnelles :
Nom : Homme Damien Attanasio
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : février 2007
Messages : 340
Points : 307
Points : 307
Je ne vois pas le problème non plus.
madevilts est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web