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 :

while dans les conditions d'une requete [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    // 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

  2. #2
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 .

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    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 ?

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. variable dans la condition d'une requete
    Par .TKrD. dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/04/2009, 11h22
  2. [SQL] Comment je peux mettre les résultat d'une requete dans un fichier
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 10/12/2006, 21h44
  3. Réponses: 3
    Dernier message: 04/07/2006, 16h34
  4. [MySQL] mettre les resultats d'une requete dans un select
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/01/2006, 16h19
  5. inscrire dans un javascript les résltats d'une requete Mysql
    Par nono3000 dans le forum Général JavaScript
    Réponses: 38
    Dernier message: 23/12/2005, 14h57

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