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 :

Problème différentiation des lignes d'une table dans une boucle [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Par défaut Problème différentiation des lignes d'une table dans une boucle
    Bonjour,

    Mon titre n'étant pas très parlant, je vais tenter d'être le plus explicite possible.

    Déjà, mon problème concerne le php et le mysql.

    Je suis en train d'écrire un script de topliste (vous savez, ces pages où les sites amenant le plus de visites vers cette page sont les mieux classés...).

    J'ai finit de l'écrire, mais un problème persiste.

    Pour afficher le classement de ces sites, j'effectue une boucle, celle ci-dessous :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     for($i=1; $i<$r+1; $i++){
     $b=mysql_query("SELECT nb, nom, url, id FROM task44 WHERE id!=$num AND nb<=$c[1] order by nb desc");
     $c=mysql_fetch_array($b);
     echo"<p><b>$i.</b>  $c[1] : <a href=$c[2] target=blank>$c[2]</a><br>";
     $num=$c[3];
     }
    Le code n'est pas très clair, je sais que j'aurais pu faire un extract pour ne pas trimballer un tableau, mais là n'est pas le problème.

    D'ailleurs, si vous trouvez des petites erreurs de syntaxe ou dans les noms des colonnes, je précise que j'ai renommé les noms pour que cet exemple soit plus parlant, alors j'ai peut etre fait une faute.

    Bon, soyons concis, le but de ce code (pour ceux qui ne le trovent pas assez clair) est d'afficher les sites de la topliste par ordre décroissant en fonction donc du nombre de visites qu'ils ont apportées, ici inscrit dans la colonne "nb" de la table mysql.
    Ces sites sont définis par leut url ("url"), leur titre ("nom"), leur nombre de visites apportées ("nb"), et un nombre ("id"), qui est en fait un "autoincr" de la table mysql, qui permet de classer les sites en fonction de leur date d'ajout, ou en tout cas d'avoir un nombre différent associé à chaque site.

    Bon bon, ce code marche, sauf que lorsque plus de 2 sites ont apporté le même nombre de visites (donc plus de 2 sites dont le "nb" est égal), eh bien seuls 2 de ces sites s'affichent plusieurs fois. (exemple ici : http://moneyworld.ptc4ever.com/index.php?p=partenaires les sites eurosmaker et ptc4ever ne devraient etre affichés qu'une seule fois chacun).

    Dans l'espoir que quelqu'un comprenne mon code et ai lu cet article jusqu'au bout, je vous remercie d'avance, car pour moi c'est insoluble :/

    Bien à vous,
    Pioul

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 323
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 323
    Billets dans le blog
    17
    Par défaut
    Au vu de ce que tu exprimes je ne comprends pas pourquoi ta boucle est si complexe et pourquoi une requête s'y trouve.

    Je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT ALL id, nom, url, nb FROM sites ORDER BY nd DESC' ;
    $rs = mysql_query($sql) ;
    while ( $tuple = mysql_fetch_object($rs) ) {
        echo "<li><a href='$tuple->url'>$tuple->nom</a></li>" ;
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Par défaut
    Le problème vient du fait que je ne me penche que le dynamique que depuis 2 mois, et j'ai commencé en bidouillant moi même de vieux scripts, c'est comme ça que j'ai appris les grandes lignes du php et du mysql...tu comprendras donc aisément pourquoi je sors des trucs peu optimisés et "à l'ancienne", car je ne connais pas encore tout, loin de là.

    Donc mon code était compliqué parce que je ne connaissais pas cette merveille de la nature qu'est le mysql_fetch_object

    Franchement merci, aujourd'hui tu viens de m'apprendre un truc, et ça va me permettre, au delà du fait que mon problème est résolu, d'optimiser pas mal de code que j'avais fait dans le style du précédent

    Merci pour la rapidité et la qualité de ta réponse


    Juste une dernière précision si ce n'est trop demander :

    Si je comprends bien ton code, le SELECT ALL [...] permet de prendre toutes les lignes tu tableau...pour prendre les 10 premières apr exemple, que faut-il mettre ?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 323
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 323
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par ppioul Voir le message
    Si je comprends bien ton code, le SELECT ALL [...] permet de prendre toutes les lignes tu tableau...pour prendre les 10 premières apr exemple, que faut-il mettre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT ALL id, nom, url, nb FROM sites ORDER BY nd DESC LIMIT 10' ;
    (le ALL est juste la réciproque par défaut du DISTINCT)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Par défaut
    Ok j'ai compris, merci pour ta précieuse aide

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/07/2013, 16h24
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Transférer des lignes d'un datastore dans une table SQL
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 7
    Dernier message: 30/10/2006, 14h55

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