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 29/05/2006, 03h04   #1
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
Par défaut [SQL] Nombre de résultats par pays

salut,
j'ai la boucle suivante qui me retourne le nombre d'etudiant entre 2 date avec le nom de leur pays:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
if ($NomberStudentsOk == OK ){
        echo 'From '.$StartDate.' to '.$EndDate.': <br><br>';
        $i = 0;
        $sql = "SELECT refstudent FROM travels WHERE ((ArrivalDate <= '$EndDate') AND (ArrivalDate >= '$StartDate'));";
        $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
        while($data = mysql_fetch_assoc($req)) {
            $refstudent = $data['refstudent'];
            $sql2 = "SELECT LastName,FirstName,Country FROM students WHERE IdStudent = '$refstudent'";
            $req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
            while($data = mysql_fetch_assoc($req2)) {
                $LastName = $data['LastName'];
                $FirstName = $data['FirstName'];
                $Country = $data['Country'];
            }
            echo '- '.$FirstName.' '.$LastName.' from '.$Country.'<br>';
            $i++;
        }
        echo '<br>There is '.$i.' resultats<BR>';
    }
je voudrai egalement compter le nombre d'etudiant par pays mais je n'y arrive pas a cause de la premiere boucle while qui me renvoye l'id des etudiants pour qui les dates corespondent.

avez vous une idee?
merci
flOZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2006, 08h45   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Salut !

Alors, déjà tu devrais éviter parce que là tu fais une requête par étudiant... pas terrible, vaut mieux faire une petite jointure au début :
Code :
1
2
3
4
5
SELECT s.LastName, s.FirstName, s.Country
FROM students s
   INNER JOIN travels t
      ON s.IdStudent = t.refstudent
WHERE t.ArrivalDate BETWEEN '$StartDate' AND '$EndDate'
en plus, BETWEEN est mieux que '>= AND <='

déjà ceci d'évite de faire une requête par étudiant ce qui est très très couteux.

Ensuite, pour compter le d'étudiant par Pays, tu as plusieurs choix...

Le premier est de faire une seconde requête :
Code :
1
2
3
4
5
6
SELECT COUNT(*) AS count, s.Country
FROM students s
   INNER JOIN travels t
      ON s.IdStudent = t.refstudent
WHERE t.ArrivalDate BETWEEN '$StartDate' AND '$EndDate'
GROUP BY s.Country
ou alors d'inclure le compte dans le parcours de ta requête :

avant le while : dedans :
Code :
1
2
3
if(!isset($count[$data['Country']]))
   $count[$data['Country']] = 0;
++$count[$data['Country']];
après tu n'as plus qu'à parcourir le tableau $count pour avoir le nombre d'étudiant par pays
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 05h29   #3
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
super, j'ai reussi grace a ton code, j'etais loin de faire ca mais maintenant je le reutilise bcp!
flOZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h42.


 
 
 
 
Partenaires

Hébergement Web