[PHP] Classer les données de plusieurs tables

Fermé
YannOuch - 19 janv. 2012 à 18:08
AssassinTourist Messages postés 5893 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 - 20 janv. 2012 à 10:05
Bonsoir,

Voilà, pour résumer la situation, je bloque depuis 3 semaines pour regrouper et classer les données de plusieurs tables selon un champ identique sur celles-ci.
Voici le code en question :
<?php
//INFOS DE CONNEXION A LA BDD
$ppo = mysql_query("SELECT fn FROM tasks");
$tak = mysql_fetch_array($ppo);

$ppo = mysql_query("SELECT fcode FROM tasks WHERE fn='.htmlentities($tak['fn']).' ");
$tak = mysql_fetch_array($ppo);

$req=mysql_query('SELECT fid, COUNT(*) AS nb_clic FROM task'.htmlentities($tak['fcode']).' WHERE fdate BETWEEN "2012-01-01" AND "2012-01-31" GROUP BY fid ORDER BY nb_clic DESC LIMIT 0,15');
?>
Pour la petite explication, fcode le numéro de la table task. Elle même présenté/décrite dans la table tasks.
Je récupère donc les numéros des tables sur tasks et les associes a task. Mais lors de l'affichage suivant, pour le clasement, au lieu d'apparaître le nombre d'entrés total/jour additionnés, j'ai le nombre de jour additionnés entre la date de début et date du jour bien entendu.
Voici pour l'affichage de mon classement :
<?php
$i = 0;
while($infos = mysql_fetch_array($req))
{
$i++;
$user_id = $infos['fid'];
$rep = mysql_query("SELECT username FROM users WHERE fid=$user_id");
$user = mysql_fetch_array($rep);

if ($i%2 == 0) { $resultat = '#6CB3DD'; }
else if ($i%2 == 1) { $resultat = '#ADD3FF'; }
?>
<tr>
<td style="background-color:<?php echo $resultat; ?>;border: 1px solid #183F77;"><?php echo $i; ?></td>
<td style="background-color:<?php echo $resultat; ?>;border: 1px solid #183F77;"><?php echo $user['username']; ?></td>
<td style="background-color:<?php echo $resultat; ?>;border: 1px solid #183F77;"><?php echo $infos['nb_clic']; ?></td>
</tr>
<?php
}
?>

Si une ou des personnes aurait une idée de ce qui cloche !
Je vous remercie par avance, et vous souhaite une bonne soirée.
Bien amicalement, Yann.



A voir également:

1 réponse

AssassinTourist Messages postés 5893 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 312
19 janv. 2012 à 19:08
Je n'ai pas compris ce que tu avais comme résultat au final et ce que tu voulais en fait comme résultat au départ.
0
AssassinTourist Messages postés 5893 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 312
19 janv. 2012 à 19:09
Est-ce que le résultat de tes requêtes est bon ? Tu l'as testé directement dans ta base ?
0
Bonsoir,
Désolé, entre temps je suis reparti travailler. (Restauration).

Je souhaite obtenir comme résultat le total d'entrées de fid dans les tables task'.htmlentities($tak['fcode']).' entre deux dates. Soit ici entre le 1er et le 31 Janvier 2012.
Or j'ai au final le nombre de jours ou fid est dans task'.htmlentities($tak['fcode']).' du 1er au jour en cours, soit 19 jours si fid est entré 19 fois.

J'ai fais le test sur ma page :
<?php echo $tak['fcode']; ?> : et en effet ça cloche, en place d'avoir tous les numéros j'en ai un seul !
Et quand je teste ma requete ($req) j'ai une erreur également : Ressource ID#44 ..

Pourtant, je récupère de la même façon, les numéros sur une autre page de mon site.

COmment le testé directement dans ma base ? De la même manière ?
En vous remerciant,
Bien amicalement, Yann.
0
AssassinTourist Messages postés 5893 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 312
20 janv. 2012 à 10:05
Avec phpmyadmin, tu as un onglet de ta base qui est SQL il me semble. Tu as un textarea où tu peux faire directement tes requêtes SQL et la base te dira soit tes erreurs soit le résultat complet qu'il récupère.

Et c'est normal que <?php echo $tak['fcode']; ?> renvoie qu'une seule valeur. Tu lui fais en gros un tab[2], càd la valeur dans la case.

Si tu veux faire le calcul sur plusieurs tables, tu ne peux pas mettre plusieurs tables dans ton SELECT FROM. Pour cela, il faut plutôt faire un JOIN de tes tables pour avoir au final qu'une table et faire tes recherches là-dessus. La commande, c'est INNER JOIN (ou OUTER JOIN, ça dépend ce que tu veux)
http://www.areaprog.com/sql/cours-308-les-jointures-inner-join-left-right-et-full-outer-join
http://www.trucsweb.com/Tutoriels/asp/tw104/
Je crois que ça peut le faire même si les tables n'ont (rien en commun)
0