Bonjour,
Voila je rencontre un petit problème avec mon code.
Alors toutes les données proviennent d'une base mysql.
Je voudrais ajouter à mon site de sondage une fonctionnalité pour avoir le top 5 du classement sur les 7 derniers jours.
Pour éviter de faire plein de requêtes SQL je fais un fetchAll de 2 tableau que je compte trier ensuite en PHP.
J'ai 2 foreach imbriqués pour essayer d'avoir un tableau formaté du style: array(candidat => nombre_de_votes_des_7_derniers_jours)
Bref le code fonctionne, j'ai un $i qui a une bonne valeur, mais dès que j'essaie de le mettre dans le tableau, il change de valeur, je ne sais vraiment pas pourquoi.
Je met le code et la sortie
$tab = array();
foreach ( $candidats_tab as $candidat) {
echo $candidat['candidat'] . '=';
$i = 0;
$tab += array($candidat['candidat'] => $i);
foreach ($votes_1week as $vote) {
if (strcmp($candidat['candidat'] ,$vote['id_candidat']) === 0 ) {
$i++;
}
}
echo $i . ' ';
$tab += array($vote['id_candidat'] => $i);
}
var_dump($tab);
L'output:
melanchon=1 hamon=1 macron=2 fillon=1 dupont=0 lepen=0 cheminade=0 poutou=0 arthaud=0 blanc=0 alliot=0 asselineau=0
C:\wamp64\www\collectiondb\sondage\src\top5.php:51:
array (size=12)
'melanchon' => int 0
'macron' => int 1
'hamon' => int 0
'fillon' => int 0
'dupont' => int 0
'lepen' => int 0
'cheminade' => int 0
'poutou' => int 0
'arthaud' => int 0
'blanc' => int 0
'alliot' => int 0
'asselineau' => int 0
Ma valeur de $i en echo est bonne, mais le tableau ne contient pas cette valeur...Pourquoi?
C'est sur un serveur de test, j'ai mis quelques valeurs pour tester, mais je ne sais pas comment résoudre ce problème :(
hello, l'ajout de données à ton tab est étrange, peut-être comme ça :
$tab = array();
foreach ( $candidats_tab as $candidat) {
echo $candidat['candidat'] . '=';
$i = 0;
/* $tab += array($candidat['candidat'] => $i); // <- je fais sauter, je pense que c po bon... */
foreach ($votes_1week as $vote) {
if (strcmp($candidat['candidat'] ,$vote['id_candidat']) === 0 ) {
$i++;
}
}
echo $i . ' ';
/* $tab += array($vote['id_candidat'] => $i); // idem */
$tab[$candidat['candidat']] = $i; // <- je remplace par ceci
}
var_dump($tab);
Bonjour.
Je crois que tu aurais besoin de revoir à quoi sert la fonction strcmp
pour commencer :
Comparaison binaire de chaînes
Retourne < 0 si str1 est inférieure à str2; > 0 si str1 est supérieure à str2, et 0 si les deux chaînes sont égales.
C'est donc une fonction à utiliser pour comparer deux châine de caractères au format string, sauf qu'à en juger par le nom d'un de tes champs, l'une des deux valeurs est de type int soit des chiffres.
Merci saibe, c'est bien la façon dont j'ai construit le tableau le problème, même si je ne m'explique pas trop le résultat bizaroïde :)
Sinon les 2 chaines que je compare doivent être égales, parce que j'ai 2 tables avec un identifiant de candidat sous forme de chaine de caractère, c'est sans doute pas un modèle très adéquat mais comme je rajoute des fonctionnalités petit à petit et que j'ai voulu aller au plus simple pour que ce soit rapide, j'ai fait comme ça.
;) si tu as validé, c que ça fonctionne... mais je pense que tu aurais mieux fait d'utiliser une bonne requete SQL avec un 'GROUPE BY'
regarde peut-être ici, si ça peut t'aider...
Je ne sais pas, tu pourrais m'aider à grouper ces 2 requêtes? C'est les champs dont j'ai absolument besoin, le strict minimum qui devra être réutiliser.
J'ai du mal à utiliser les jointures, surtout avec des id un peu bizarroïde de la façon dont j'avais construit mes tables, et comme j'ai pas envie de devoir modifier tout mon code, je laisse comme ça :(
$query = $bdd->prepare('SELECT candidat,nom_complet FROM candidats'); //ici candidat est une sorte d'id unique, mais c'est une chaine de caractère.
$query = $bdd->prepare('SELECT id_candidat FROM votants WHERE date_vote BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()'); // et ici id_candidat est le même que l'autre, l'id du candidat, mais de la table des votes (qui contient d'autres informations utiles pour d'autres traitements)
//PS: j'ai aussi besoin du nom_complet pour plus tard pour l'envoyer via ajax pour formater du HTML.
;) pas de soucis.
par contre, peux-tu réouvrir un post ds MYSQL histoire de conserver la logique des forums ?
tu y post ta demande 'faire un 'GROUP BY'' et tu y mets un aperçu de tes tables.
ainsi, nous serons bien plus efficace, car tu as déjà 'résolu' ce post...
on se retrouve ds MYSQL....