Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 18/11/2010, 19h23   #1
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Par défaut while dans les conditions d'une requete

Bonjour à tous,

Je cherche à afficher, à l’aide de PHP/MySQL, le nombre de visites de ville qu’une personne doit faire pour atteindre un record (ne cherchez pas de sens à ce concours c’est purement théoriques). Voici mes tables :

villes : Les lignes stockent le nom des villes
ID_ville | nom_ville
1 | Paris
2 | Lille
personnes : On retrouve le nom des villes dans les colonnes et les lignes stockent, par personne, le nombre de visite quelles font dans chaque ville.
ID_personne | Paris | Lyon | Lille
1 | 24 | 45 | 45
2 | 45 | 55 | 36
3 | 78 | 00 | 78
Par exemple la personne n°2 a visité 55 fois Lyon et la personne n°1 à visité 24 fois Paris.

Ce que je cherche à faire, avec une requête, c’est extraire, pour une personne, le nombre de visite qu’il lui reste à faire pour obtenir le record 1 ou 2 selon ma troisième table :

records : nombre de visite en ligne, les colonnes contiennent le nom des villes :
ID_record | Paris | Lyon |Lille
1 | 12 | 25 | 1
2 | 45 | 8 | 90
Ensuite, j’ai construit le code de la façon suivante :

On extrait le nombre de visite à faire dans les villes pour avoir le record n°1 :
Code :
$record1 = mysql_fetch_array(mysql_query(“SELECT * FROM records WHERE id_record=’1’;”));
Ensuite on verifie, pour la personne n° 1, si elle remplie les conditions du record, stockées dans $record1 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$sql = mysql_query(“SELECT * FROM personnes WHERE id_visite=’1’ AND paris >= ’ $record1[paris]’ AND lyon >= ’ $record1[lyon]’  AND lille >=’ $record1[lille];” );
 
$ok= mysql_num_rows($sql);
 
if($ok == ‘1){
 
// La personne a visité suffisamment de fois les villes pour avoir droit au record n°1
 
}
if($ok == ‘0){
 
// La personne n’a pas fais assez de visites
 
}
Normalement, ce code là fonctionne (si je n’ai pas fait d’erreur de recopiage). Ce que je cherche à faire, et c’est là où j’ai besoin de vous, c’est comment faire pour générer dynamiquement la liste des conditions à remplir dans ma requête $sql ?

Ce que je veux dire, c’est que les records ne se limiteront pas à 3 villes, des lignes dans la table villes ainsi que des colonnes dans la table personnes vont s’ajouter.Je ne veux pas completer les requetes à chaque qu'une ville s'ajoute !

Y’a-t-il un moyen pour qu'une requête soit semblable a celle-ci (vraiment désolé, je sais que ce code ne fonctionne pas mais c’est un bon moyen pour exprimer ma demande) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// On extrait le nombre du record n°1
$record1 = mysql_fetch_array(mysql_query(“SELECT * FROM records WHERE id_record=’1’;”));[/
 
 
// On extraits le nom des villes
$villesql = mysql_query("SELECT * FROM villes; ") ;
 
 
// Puis on intègre un while de $villesql dans les conditions de la requête pour generer les noms des villes
$sql = mysql_query(“SELECT * FROM personnes WHERE id_visite=’1’ AND 
 
While($ville = mysql_fetch_array($villesql)){
 
Echo $ville[‘nom_ville’].’ >= ‘.$Record1[$ville[‘nom_ville’]].’ AND ‘;
}
paris >= ’ $Record1[paris]’ AND lyon >= ’ $Record1[lyon]’  AND lille >=’ $Record1[lille]
 
;” );
Merci d’avance
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 19h43   #2
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Est-ce que tu as le droit de modifier la structure des tables, car personnellement, je modifierais la structure de la table personnes pour rendre les choses plus faciles... et aussi donner un sens à ta table ville qui ne sert actuellement à rien:

personnes:
ID_personne | ID_ville | nbr_visites
1 | 1 | 24
1 | 2 | 45
...


Même chose pour la table records:

ID_record | ID_ville | record
1 | 1 | 24
2 | 2 | 36
....

Après ça, quand tu veux aller charger les visites des personnes dans une ville quelconque, tu peux simplement faire:
Code :
1
2
 
SELECT * FROM personnes order by ID_personnes
et boum, tu as toutes les visites de toutes les personnes pour toutes les villes, peu importe le nombre de villes.

De la même façon, tu peux aller chercher tes records avec une simple requête:

Code :
SELECT * FROM records order by ID_ville
Et tu as tous les records triés par ville, peu importe le nombre de records et peu importe le nombre de villes.

Donc voilà, j'espère que ça va pouvoir t'aider .
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 20h41   #3
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Bonsoir !

Merci beaucoup pour ta réponse !

Je ne peux malheuresement pas modifier la table ville car elle comporte un grand nombre d'information (plus de douzaine de colonnes) d'autant plus que j'utilise ces informations lors du traitement final si jamais la personne correspond au record... niarf

y'a t-il un moyen de m'en sortir avec cette architecture ?
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 21h30   #4
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
En fait tu es de très bons conseils osuwariboy.

Je vais tenter ce que tu m'as dis !!

Après reflexion, j'irais chercher les informations de ma table villes en faisant un JOIN dans ma requete.

Merci beaucoup.
vinze60 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 09h25.


 
 
 
 
Partenaires

Hébergement Web