Fetch_array revoi trop de donnée

Résolu
bidulesfr Messages postés 25 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 20 décembre 2007 - 5 janv. 2006 à 07:50
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 6 janv. 2006 à 08:21
Salut,

J'ai un petit soucis dans ce petit script
Il regarde les personnes qui se sont connecté sur le forum. Et réagit en fonction de leur temps d'inactivité (envoi d'un mail, ou autre)
Ici, pour l'exemple, j'ai juste demandé l'affichage à l'arrache des pseudo des 'inactifs' depuis une semaine.
Et la ca bug. Aller soyons fou, disons que il n'y a qu'une personne qui correspond aux criteres. Donc normalement, l'echo me revoi juste une le pseudo.
Or la, il me renvoi le pseudo un paquet de fois. En faite, il le renvoi autant de fois qu'il y a d'entrée dans la table phpbb_user_group avec le groupe 6 (reformulation au cas ou, il renvoi autant de fois le pseudo qu'il y a de personne dans le groupe d'utilisateur que j'ai demandé)
Si le script doit envoyer un mail, ca va vite spammer quelque boite mail tout ca

A mon avi c'est juste la requete sql qui merdouille, mais au cas ou, je donne tout le code.

<?php
$db=mysql_connect($dbhost,$dblogi,$dbpass)or die(mysql_error());
mysql_select_db($dbbase,$db)or die(mysql_error());
$sql="SELECT *
FROM phpbb_users U, phpbb_user_group UG, select_team STWHERE U.user_id ST.user_id UG.user_id
AND UG.group_id = 6
ORDER BY `user_lastvisit` DESC";
$res=mysql_query($sql, $db) or die (mysql_error());
while ($donnees = mysql_fetch_array($res) )
{
//La fait des variable inutile, mais je trouve ca plus simple à manipuler ;)
$avi = $donnees['avi']; // On colle l'indice de passage dans une variable $avi
$timeActuel = time(); //Donne le timestamp actuel
$semaine = $timeActuel - (7 * 24 * 60 * 60); // Donne le timestamp d'il y a une semaine
$timestamp = $donnees['user_lastvisit']; //Colle la derniere visite dans une variable sous forme du timestamp
$semaines = $timeActuel - (2 * (7 * 24 * 60 * 60)); //Donne le timestamps d'il y a deux semaines
$pseudo = $donnees['phpbb_users'];
if ($timestamp > $semaines)
{
if ($avi != 1 AND $avi != 0)
{
echo $pseudo; //on affiche tous les pseudo qui correspondent.
}
}
}
?>

7 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 janv. 2006 à 10:59
Je ne sais pas comment t'expliquer.
Voici une création de requête sur 4 tables (prise de mon projet actuel) : function getList($comtId null, $entId null, $contId = null, $artId = null)
{
$whereClauseArr = array ();
if ($comtId !== null) {
$whereClauseArr[] = ' AND (sk.comt_id = '.$comtId.')';
}
if ($entId !== null) {
$whereClauseArr[] = ' AND (sk.ent_id = '.$entId.')';
}
if ($contId !== null) {
$whereClauseArr[] = ' AND (sk.cont_id = '.$contId.')';
}
if ($artId !== null) {
$whereClauseArr[] = ' AND (sk.art_id = '.$artId.')';
}
$sQuery = 'SELECT
sk.sk_id, rg.rg_libelle, zone.zone_libelle, etg.etg_libelle
FROM
stocks sk, sk_rangees rg, sk_zones zone, sk_etages etg
WHERE
(sk.rg_id = rg.rg_id) AND
(sk.zone_id = zone.zone_id) AND
(sk.etg_id = etg.etg_id)
';

foreach ($whereClauseArr as $qry) {
$sQuery .= $qry;
}
$sQuery .= ' ORDER BY
sk.rg_id, sk.zone_id, sk.etg_id';
$aTmp = array();
$this->oDB->query($sQuery);

while($a = $this->oDB->fetch_assoc() ) {
$aTmp[$a['sk_id']] = $a['rg_libelle'].$a['zone_libelle'].$a['etg_libelle'];
}
return $aTmp;
}

Je ne suis pas sûr, en fait, que tes 3 tables soient bien structurées.
3
bidulesfr Messages postés 25 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 20 décembre 2007
6 janv. 2006 à 04:29
Salut,

Hééé bin, moi qui trouve que mes requete commence à devenir compliqué pour moi, quand je vois la tienne .... je me dis que mon cerveau commence à manquer de mémoire rame

En faite je suis repartie de ton premier post ou tu parlais d'un manque d'info dans le WHERE, et en inspirant de ce que tu as fait dans ta requete $sQuery, je suis arrivé la dessus. Et visiblement ca marche.

$sql="SELECT *
FROM phpbb_users U, phpbb_user_group UG, select_team ST
WHERE (
U.user_id = ST.user_id
)
AND (
UG.user_id = ST.user_id
)
AND (
U.user_id = UG.user_id
)
AND UG.group_id =6
ORDER BY `user_lastvisit` DESC"

J'ai fais que un essai, mais bon, on va dire que c'est bon hein :P
J'accepte ton dernier post, meme si la réponce est en faite mélangé un peu dans chaque post et que je donne la solution final à la fin (je vais quand meme pas accepter mon propre post hein, ca ferait tache.

Merci beaucoup du coup de main. Tu ma enlevé une grosse épine du pied.

A++
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 janv. 2006 à 09:43
Hello,

ta requête foire effectivement. Pas assez de critères dans le WHERE.
Montre la structure de tes 3 tables.
0
bidulesfr Messages postés 25 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 20 décembre 2007
5 janv. 2006 à 09:53
Pour la table phpbb_users et phpbb_user_groupe, c'est les tables d'origines
du forum phpbb (donc pas des petite table dsl )
Aller on commence par la 1ere, le gros molosse, les deux suivantes sont de taille raisonable.
phpbb_users
`user_id` mediumint(8) NOT NULL auto_increment,
`user_active` tinyint(1) default '1',
`username` varchar(25) NOT NULL default '',
`user_password` varchar(32) NOT NULL default '',
`user_session_time` int(11) NOT NULL default '0',
`user_session_page` smallint(5) NOT NULL default '0',
`user_lastvisit` int(11) NOT NULL default '0',
`user_regdate` int(11) NOT NULL default '0',
`user_level` tinyint(4) default '0',
`user_posts` mediumint(8) unsigned NOT NULL default '0',
`user_timezone` float NOT NULL default '0',
`user_style` tinyint(4) default NULL,
`user_lang` varchar(255) default NULL,
`user_dateformat` varchar(14) NOT NULL default 'd M Y H:i',
`user_new_privmsg` smallint(5) unsigned NOT NULL default '0',
`user_unread_privmsg` smallint(5) unsigned NOT NULL default '0',
`user_last_privmsg` int(11) NOT NULL default '0',
`user_emailtime` int(11) default NULL,
`user_viewemail` tinyint(1) default NULL,
`user_attachsig` tinyint(1) default NULL,
`user_allowhtml` tinyint(1) default '1',
`user_allowbbcode` tinyint(1) default '1',
`user_allowsmile` tinyint(1) default '1',
`user_allowavatar` tinyint(1) NOT NULL default '1',
`user_allow_pm` tinyint(1) NOT NULL default '1',
`user_allow_viewonline` tinyint(1) NOT NULL default '1',
`user_notify` tinyint(1) NOT NULL default '1',
`user_notify_pm` tinyint(1) NOT NULL default '1',
`user_popup_pm` tinyint(1) NOT NULL default '0',
`user_rank` int(11) default '0',
`user_avatar` varchar(100) default NULL,
`user_avatar_type` tinyint(4) NOT NULL default '0',
`user_email` varchar(255) default NULL,
`user_icq` varchar(15) default NULL,
`user_website` varchar(100) default NULL,
`user_from` varchar(100) default NULL,
`user_sig` text,
`user_sig_bbcode_uid` varchar(10) default NULL,
`user_aim` varchar(255) default NULL,
`user_yim` varchar(255) default NULL,
`user_msnm` varchar(255) default NULL,
`user_occ` varchar(100) default NULL,
`user_interests` varchar(255) default NULL,
`user_actkey` varchar(32) default NULL,
`user_newpasswd` varchar(32) default NULL,
`user_inactive_emls` tinyint(1) NOT NULL default '0',
`user_inactive_last_eml` int(11) NOT NULL default '0',
`user_tt` tinyint(1) NOT NULL default '0',
`user_ttavatar` tinyint(1) NOT NULL default '0',
`user_ttrang` tinyint(1) NOT NULL default '0',

phpbb_user_group
`group_id` mediumint(8) NOT NULL default '0',
`user_id` mediumint(8) NOT NULL default '0',
`user_pending` tinyint(1) default NULL,

select_team
`user_id` int(11) NOT NULL default '0',
`avi` int(11) NOT NULL default '0'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 janv. 2006 à 10:10
Oula...

tu veux mon avis ? Essaye déjà de la faire sous phpmyadmin, ta requête.
0
bidulesfr Messages postés 25 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 20 décembre 2007
5 janv. 2006 à 10:37
J'ai fais une petite erreur dans ce que j'ai dis, ce script la ne me retourne aucun enregistrement quelque soit les conditions. (C'étais avant que je bidouille que ca m'en revoyé de trop. Quoi boulet ?)

Je retrouve plus la requette qui me retrouver tous les pseudo. Celle la m'en revoi en faite aucun. Malgres que normalement j'ai bien un champ qui correspond.

Sinon quand je fais mes requete sql sur phpmyadmin, ca me redonne le même résultat. Soit aucun enregistrement (MySQL n'a retourné aucun enregistrement). Soit plusieurs fois le meme champ (pour l'ancienne requete, je regarde pour la refaire également)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 janv. 2006 à 08:21
Si si, j'accepte ta réponse avec :-) C'est toi qui donne la réponse
finale, donc ceux qui auront le même genre de problème, et regarderont
ce post, pourront avoir ainsi la méthode que tu as utilisé :-)

On a le droit de valider ses propres post :-) Je le fais pour toi du coup.
0
Rejoignez-nous