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 :

Récupération et interprétation de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut Récupération et interprétation de données
    Bonjour tout le monde!

    Je rencontre quelques soucis concernant la réalisation d'une petite application.

    Exemple :

    J'ai une base de données 'artiste' auxquels un jury a attribué divers notes.

    Voici ma base :

    Code sql : 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
     
    #
    # Structure de la table `artiste`
    #
     
    DROP TABLE IF EXISTS artiste;
    CREATE TABLE artiste (
      id int(11) NOT NULL auto_increment,
      hid int(11) NOT NULL default '0',
      sid int(11) NOT NULL default '0',
      name varchar(80) NOT NULL default '',
      noteA varchar(80) NOT NULL default '',
      noteB varchar(80) NOT NULL default '',
      noteC varchar(80) NOT NULL default '',
      noteD varchar(80) NOT NULL default '',
      noteE varchar(80) NOT NULL default '',
      photoartiste text NOT NULL,
      date_p TINYINT (80) NOT NULL default '',
      PRIMARY KEY  (id),
      FULLTEXT KEY name (name)
    ) TYPE=MyISAM;

    J'aimerais afficher la note la plus élevée et la moins élevée par artiste. Comment dois-je m'y prendre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $search = mysql_query("SELECT noteA, noteB, noteC, noteD, noteE FROM $artiste AS nombre ORDER BY nombre desc LIMIT 0 , 30") or die ("ERROR:" . mysql_error());
    		$row = mysql_num_rows($search);
    		$nombre = $row['nombre'];
     
    while ($row = mysql_fetch_row($search)) {
     
    echo $row['nombre'];
    Suis je sur la bonne piste avec ce code ?

    Merci d'avance

  2. #2
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Salut,

    Au niveau de ta table j'aurai fait une table artiste et une table note, je pense que déjà pour récupérer les notes ca sera beaucoup plus simple et tu pourras utiliser les MAX et MIN de SQL.

  3. #3
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Et je ne pas utiliser les MAX et MIN de SQL en gardant ma table ? Dans ce cas, comment dois je structurer ma requête ?

  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Avec la structure de ta table, je te conseil plutot une utilisation PHP pour la sélection du max et du min :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $req=mysql_query("SELECT notea,noteb,notec,noted FROM artistes");
    while($row=mysql_fetch_assoc($req)){
    $minimum=min($row['notea'],$row['noteb'],$row['notec'],$row['noted']);
    $maximum=max($row['notea'],$row['noteb'],$row['notec'],$row['noted']);
    echo "Nom de l'artiste :".$row['nom']."< /br> \n 
             A un maxi de :".$maximum." </br> \n
            Et un mini de :".$minimum."</br> \n";
    }
    Voilà !!!! Dis moi si ca marche, j'ai vérifié les fonctions, ca devrait marcher nickel !!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  5. #5
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    ....En vrai, il aurait mieux valu que tu fasses une table Artiste (nom, prenom, etc...) et une table note. Tu aurais fais référence aux notes en passant l'ID d'artiste dans la table note, comme ca :

    tables :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE `artistes` (
    `id_artiste` INT NOT NULL ,
    `nom` VARCHAR( 255 ) NOT NULL ,
    `prenom` VARCHAR( 255 ) NOT NULL
    ) ENGINE = innodb;
     
    CREATE TABLE `notes` (
    `id_note` INT NOT NULL ,
    `id_artistes` INT NOT NULL ,
    `nom_matiere` VARCHAR( 255 ) NOT NULL ,
    `note` VARCHAR( 255 ) NOT NULL
    ) ENGINE = innodb;

    Et tu aurais sélectionné tes notes comme ca :

    Code SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT MAX(note) FROM notes WHERE id_artiste=3
    SELECT MIN(note) FROM notes WHERE id_artitste=3

    Avec tout un mélange d'autres requetes (SELECT id_artiste, etc...). Peut être est-ce un peu fastidieux, cela dis ca rend ta base beaucoup plus souple et évolutive......

    Cela dis, c'est vrai que la solution que je t'ai donné plus haut est très séduisante !!!!! (Bon, on evitera de le faire avec une base de 10 00000 d'enregistrements.... )
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  6. #6
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Re

    En reprenant ta première méthode jai le message d'erreur suivant

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in
    C'est vrai que cette méthode est séduisante et j'avoue qu'elle m'enlèverrai une épine du pied pour la suite de l'application...

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Ce code fonctionne parfaitement, je l'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT * FROM artiste";
    $req = mysql_query($sql);
     
    while($val = mysql_fetch_array($req)){
       print $val['name'].' : <br />';
       print 'Min : '.min($val['noteA'],$val['noteB'],$val['noteC'],$val['noteD'],$val['noteE']).'<br />';
       print 'Max : '.max($val['noteA'],$val['noteB'],$val['noteC'],$val['noteD'],$val['noteE']).'<br /><br />';
    }
    Même si au niveau MCD et MLD il est plus correct de créer un nouvelle table "notes", question performance il vaut mieux éviter une jointure inutile. Si elle n'a que 5 notes par artiste et non un nombre indéfini et important, je pense que la structure de la table est très bien telle quelle.
    Evidemment si la table ne comporte qu'une trentaine d'enregistrement la différence ne se ressent pas. En revanche si la table atteint les 20 000 enregistrements ...

  8. #8
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Citation Envoyé par Angelik
    Re

    En reprenant ta première méthode jai le message d'erreur suivant



    C'est vrai que cette méthode est séduisante et j'avoue qu'elle m'enlèverrai une épine du pied pour la suite de l'application...
    Oui, j'ai oublié de te dire d'adapter à ta requête, la requête que j'ai fait était un exemple, pas à prendre tel quel. Bisunurs a raison, prend sa requête !!!

    Bonne chance, et n'hésite pas !!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  9. #9
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    C'est bon!
    Je viens de tester à nouveau et ça marche.

    Merci de votre aide.

  10. #10
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    De rien !!!!

    Un petit [resolu] sera le bien venu !!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

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

Discussions similaires

  1. Récupération du type de données.
    Par philnext dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/01/2008, 10h43
  2. Réponses: 5
    Dernier message: 14/01/2008, 16h54
  3. récupération date d'insertion données
    Par cesoir dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2007, 20h33
  4. Récupération de parties de données d'une cellule
    Par Jedis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/06/2007, 12h05
  5. Réponses: 2
    Dernier message: 05/12/2006, 22h10

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