requete à partir d'une boucle

Ce forum vous servira à trouver de l'aide uniquement en ce qui concerne le développement d'un de vos MODs, ou l'adaptation d'un MOD phpBB2 pour phpBB3.

Modérateur: Equipe

requete à partir d'une boucle

Messagede zach » 18 Juil 2010 à 11:11

Bonjour,

Voila j'ai un code qui génère la liste des rangs existants, avec l'image, le titre, le nb de message min pour chaque rang, dans un tableau ds la table "ranks"
La 1ere partie fonctionne :

Code: Tout sélectionner
$sql = 'SELECT *
   FROM ' . RANKS_TABLE . '
   ORDER BY rank_special ASC, rank_min ASC, rank_title ASC';
$result = $db->sql_query($sql);
$rank_row = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);

foreach($rank_row as $row)
{
    $template->assign_block_vars('ranks',array(
            'S_RANK_IMAGE'      => ($row['rank_image']) ? true : false,
              'S_SPECIAL_RANK'   => ($row['rank_special']) ? true : false,
              'RANK_IMAGE'      => $phpbb_root_path . $config['ranks_path'] . '/' . $row['rank_image'],
              'RANK_TITLE'      => $row['rank_title'],
              'MIN_POSTS'         => $row['rank_min'],
            ));



Le problème c'est qu'ensuite, je voudrais pour chaque rang, aller chercher ds la table "user" la liste des membres ayant ce rang, donc la requete doit intégrer automatiquement le rang correspondant au tableau, donc j'ai cette partie à la suite :

Code: Tout sélectionner
    $sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE user_rank = ' . $row['rank_id'];
    $result = $db->sql_query($sql);
    $ranked_users = $db->sql_query($sql);
    while($rank_row = $db->sql_fetchrow($ranked_users))   
    {
       $template->assign_block_vars('ranks.user',array(
                    'USERNAME'    => get_username_string('username', $info['user_id'], $info['username'], $info['user_colour']),
                    ));
    }
}


Mais cette partie ne fonctionne pas, la colonne avec la liste des membres pour chaque rang, reste vide

Merci
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Dakin Quelia » 19 Juil 2010 à 03:45

Bonjour zach,

A mon avis, il te faut faire des jointures. Pour t'y aider, je te suggère de lire ces documentations:


A bientôt,
Ouvrir un compte Gratuit chez Free-H? Détail complet en cliquant ici ! - Image Aucun support par mail, MP ou msn.
Mon blogue: Mon blogue | Mon jeu de rôles: Sénat Galactique | Mon hébergeur: Free-H | Mes documentations
Avatar de l’utilisateur
Dakin Quelia
Superstar
 
Messages: 16834
Inscription: 31 Oct 2006 à 19:33
Localisation: Belgique

Re: requete à partir d'une boucle

Messagede zach » 19 Juil 2010 à 13:45

Salut,

merci des liens, je ne sais pas trop s'il faut passer par des jointures,

Le truc c'est que la 1ère partie génère un tableau descriptif des rangs (donc ds la table "ranks") avec pour chaque rang :
- l'image : $row['rank_image']
- le nom : $row['rank_title']
- le nb de post min : $row['rank_min']

à partir de la je me base sur le $row['rank_id'] (donc ds la table "ranks") pour identifier chaque rang, et lancer la 2ème partie qui va chercher dans la 1ère boucle, la liste des membres, ayant ce rank_id (ds la table "users") une sorte de sous boucle, d'ou la liaison ici ou l'on voit bien que la 2ème boucle est fonction du $row['rank_id'] de la 1ère :

Code: Tout sélectionner
  $sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE user_rank = ' . $row['rank_id'];


Mais le truc c'est que je ne peut pas dissocier les 2 parties, puisque il faut bien que chaque ligne du tableau recherche les users, correspondant au bon rang, une sorte de de boucle avec sous boucle, appelée "nested loop" j'ai cru comprendre
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Dakin Quelia » 19 Juil 2010 à 15:42

zach a écrit:merci des liens, je ne sais pas trop s'il faut passer par des jointures,


Les jointures permettent d'appeler et d'utiliser deux tables.

Le « rank_id » dans la table « phpbb_users » est liée à l'ID de la table « phpbb_ranks ». Donc, il est nécessaire de faire une requête de type jointure. :)
Ouvrir un compte Gratuit chez Free-H? Détail complet en cliquant ici ! - Image Aucun support par mail, MP ou msn.
Mon blogue: Mon blogue | Mon jeu de rôles: Sénat Galactique | Mon hébergeur: Free-H | Mes documentations
Avatar de l’utilisateur
Dakin Quelia
Superstar
 
Messages: 16834
Inscription: 31 Oct 2006 à 19:33
Localisation: Belgique

Re: requete à partir d'une boucle

Messagede zach » 19 Juil 2010 à 17:33

Ce genre la ?

Code: Tout sélectionner
$sql = 'SELECT ui.rank_id, ui.user_id, ui. username, ui.user_colour,  i.rank_id
FROM ' . USERS_TABLE . ' ui
LEFT JOIN ' . RANKS_TABLE . ' i
ON ui.rank_id = i.rank_id
WHERE ui.rank_id = ' . $row['rank_id']. '


une proposition de code global, sinon ? :D
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Théonaute » 20 Juil 2010 à 05:49

Bonsoir,

La jointure ne sert à rien dans ce cas de figure...
Une jointure sert effectivement à récupérer des infos dans plusieurs tables, selon certains critères.
Or ici, on veut récupérer plusieurs éléments pour une même clé, et non pas des informations complémentaires situées dans d'autres tables pour un enregistrement.

Il faut donc procéder comme le fait zach.

Concernant le fait que ça n'affiche rien, l'erreur est très simple (je passe par la fonction citation pour la couleur) :
$sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE user_rank = ' . $row['rank_id'];
$result = $db->sql_query($sql);
$ranked_users = $db->sql_query($sql);
while($rank_row = $db->sql_fetchrow($ranked_users))
{
$template->assign_block_vars('ranks.user',array(
'USERNAME' => get_username_string('username', $info['user_id'], $info['username'],$info['user_colour']),
));
}


Erreur de copier/coller ? :mrgreen:

Bien à vous,
Théonaute | Mes MODs pour phpBB3.0.x | MODs de l'équipe des codeurs de phpbb-fr
Dernier MOD, le 31 décembre 2010 : Couleurs de fond pour les groupes v2.0.1.
Demande de support par MP ou en dehors du forum à vos risques et périls
Avatar de l’utilisateur
Théonaute
Resp. des codeurs
Resp. des codeurs
 
Messages: 5437
Inscription: 22 Jan 2006 à 16:45
Localisation: Montréal

Re: requete à partir d'une boucle

Messagede zach » 20 Juil 2010 à 22:23

Théonaute a écrit:Concernant le fait que ça n'affiche rien, l'erreur est très simple (je passe par la fonction citation pour la couleur) :
$sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE user_rank = ' . $row['rank_id'];
$result = $db->sql_query($sql);
$ranked_users = $db->sql_query($sql);
while($rank_row = $db->sql_fetchrow($ranked_users))
{
$template->assign_block_vars('ranks.user',array(
'USERNAME' => get_username_string('username', $info['user_id'], $info['username'],$info['user_colour']),
));
}



Merci, mais que signifient ces couleurs ?, j'avoue que j'ai pas compris les modifs

Voici le package actuel pour tester

Merci
Dernière édition par zach le 20 Juil 2010 à 22:28, édité 1 fois.
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Dakin Quelia » 20 Juil 2010 à 22:25

zach,

En rouge, ce sont des erreurs.

Dans ta boucle tu définis « $rank_row » et dans la fonction, tu as mis « $info ». Or « $info » n’a pas été défini. :)
Dernière édition par Dakin Quelia le 20 Juil 2010 à 23:09, édité 1 fois.
Ouvrir un compte Gratuit chez Free-H? Détail complet en cliquant ici ! - Image Aucun support par mail, MP ou msn.
Mon blogue: Mon blogue | Mon jeu de rôles: Sénat Galactique | Mon hébergeur: Free-H | Mes documentations
Avatar de l’utilisateur
Dakin Quelia
Superstar
 
Messages: 16834
Inscription: 31 Oct 2006 à 19:33
Localisation: Belgique

Re: requete à partir d'une boucle

Messagede zach » 20 Juil 2010 à 22:38

ok je vois donc avec ceci ?

Code: Tout sélectionner
$sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE user_rank = ' . $row['rank_id'];
$result = $db->sql_query($sql);
$ranked_users = $db->sql_query($sql);
while($rank_row = $db->sql_fetchrow($ranked_users))
{
$template->assign_block_vars('ranks.user',array(
'USERNAME' => get_username_string('username',$rank_row['user_id'],$rank_row['username'],$rank_row['user_colour']),
));
}
}


Ca n'affiche toujours rien ds la colonne ...

Merci
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Théonaute » 21 Juil 2010 à 03:21

Alors c'est un problème de template, et je viens de vérifier, c'est effectivement cela.
Vous utilisez un bloc dans votre code php qui n'existe pas dans votre template... Ça ne peut donc pas fonctionner...

Dans le template :
Trouvez :
Code: Tout sélectionner
        <td align="center">{ranks.user.USERNAME}</td> 

Remplacez par :
Code: Tout sélectionner
        <td align="center">
            <!-- BEGIN user -->
            {ranks.user.USERNAME}<br />
            <!-- END user -->
        </td> 


Bien à vous,
Théonaute | Mes MODs pour phpBB3.0.x | MODs de l'équipe des codeurs de phpbb-fr
Dernier MOD, le 31 décembre 2010 : Couleurs de fond pour les groupes v2.0.1.
Demande de support par MP ou en dehors du forum à vos risques et périls
Avatar de l’utilisateur
Théonaute
Resp. des codeurs
Resp. des codeurs
 
Messages: 5437
Inscription: 22 Jan 2006 à 16:45
Localisation: Montréal

Re: requete à partir d'une boucle

Messagede zach » 21 Juil 2010 à 05:16

Merci ca fonctionne,

malheureusement ca a mis en évidence un autre prb, apparemment seul les rangs spéciaux sont référencés ds "user_rank" de ta table "users" (tous les autres sont à "0" je viens de vérifier ds ta base) donc la requête n'est pas adaptée à tous les rangs.... j'ai bien peur de ne pas m'en sortir s'il faut recalculer tous les rangs en fonction du nb de messages :(

ou alors peut être en faisant + simple, c'est à dire en listant juste le nb total de membres pour chaque rang donné, mais comment gerer chaque intervalle :o

Y a t'il un pro de la requête pour m'aiguiller ds ce chemin semé d'embuches et traquenards de toutes sortes ? :evil: 8) :mrgreen:

requete contest :lol:
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Théonaute » 22 Juil 2010 à 01:20

Puisque tu utilises le système de phpBB :
Code: Tout sélectionner
        global $cache;
        $ranks = $cache->obtain_ranks(); 


;)
Théonaute | Mes MODs pour phpBB3.0.x | MODs de l'équipe des codeurs de phpbb-fr
Dernier MOD, le 31 décembre 2010 : Couleurs de fond pour les groupes v2.0.1.
Demande de support par MP ou en dehors du forum à vos risques et périls
Avatar de l’utilisateur
Théonaute
Resp. des codeurs
Resp. des codeurs
 
Messages: 5437
Inscription: 22 Jan 2006 à 16:45
Localisation: Montréal

Re: requete à partir d'une boucle

Messagede zach » 23 Juil 2010 à 22:27

Théonaute a écrit:Puisque tu utilises le système de phpBB :
Code: Tout sélectionner
        global $cache;
        $ranks = $cache->obtain_ranks(); 


;)


pour l'instant ca ne me parle pas trop comment intégrer ca, mais merci de l'info, :mrgreen:
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31

Re: requete à partir d'une boucle

Messagede Théonaute » 24 Juil 2010 à 02:02

Je devais être fatigué, ce tableau ne te sert qu'à récupérer la liste de tous les rangs... Pas la liste des membres pour un rang. Désolé.
Théonaute | Mes MODs pour phpBB3.0.x | MODs de l'équipe des codeurs de phpbb-fr
Dernier MOD, le 31 décembre 2010 : Couleurs de fond pour les groupes v2.0.1.
Demande de support par MP ou en dehors du forum à vos risques et périls
Avatar de l’utilisateur
Théonaute
Resp. des codeurs
Resp. des codeurs
 
Messages: 5437
Inscription: 22 Jan 2006 à 16:45
Localisation: Montréal

Re: requete à partir d'une boucle

Messagede zach » 24 Juil 2010 à 17:21

requete contest donc :mrgreen:
Avatar de l’utilisateur
zach
Maître-posteur
Maître-posteur
 
Messages: 415
Inscription: 22 Oct 2008 à 17:31


Retourner vers Aide au développement

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Ask Jeeves [Bot], Baidu [Spider] et 1 invité

Liens : phpBB.biz • phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB-Conseils.com • phpBB3 Styles • phpBB podpora • phpBB Portugal • Tapatalk • Net Avenir • PromoBenef • Ticket Gagnant •