cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013
-
8 mars 2006 à 00:08
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013
-
12 mars 2006 à 02:03
Bonjour a tous,
Voila j'ai plusieurs requete SQL a suivre qui sont identiques a part la valeur du champ qui changent, je me demandais s'il n'etais pas possible de les regrouper en une seule avec un array ?
exemple :
$sql1 = mysql_query("SELECT * FROM table WHERE page='index'");
$sql2 = mysql_query("SELECT * FROM table WHERE page='forum'");
$sql3 = mysql_query("SELECT * FROM table WHERE page='photos'");
$sql4 = mysql_query("SELECT * FROM table WHERE page='contact'");
$sql5 = mysql_query("SELECT * FROM table WHERE page='membres'");
remplacer par : (si possible)
$champ = array(index,forum,photos,contact,membres);
$sql = mysql_query("SELECT * FROM table WHERE page='$champs'");
j'ai essayé mais ca ne fonctionne pas puisque la valeur de $champ est array !
cs_AshenShugar
Messages postés202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 10 mars 2006 à 07:26
mdr, autant pour moi. Ce n'est pas explode mais implode qui faut utiliser. De plus, si tu es sûr que les valeurs de ton tableau
et que le champs de ta table soit un entier, tu peux te passer des
quotes.
$sql1 =
mysql_query("SELECT mois,nb FROM stats WHERE mois IN (" . implode(",", $champ) . ") AND annee='2006' ") or die ('ERREUR SQL !
'.$sql1. mysql_error());
while($data = mysql_fetch_array($sql1)){
$mois = $data['mois'];
$nb = $data['nb'];
echo "mois ".$mois." : ".$nb." visites
";
}
Ce coup-ci, ça doit marcher !
Le hardware, c'est sur quoi l'on tape lorsque le software merde...
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013 8 mars 2006 à 00:15
j'ai oublié : sachant qu'apres ma requete j'utilise un while car il ya plusieurs lignes differentes a chaque requete et que je veux toute les utiliser.
je m'explique c'est pour des stats, j'ai ma table STATS composée comme ceci :
num page nb jour mois annee
ou nb est le nombre de fois ou la page a été visitée pour jour mois annee
et je souhaite affichée le nb par page et jour par jour ou mois par mois
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013 8 mars 2006 à 10:24
et si la valeur du IN est variable ?
et je ne peux pas mettre le nom des champs car celui ci aussi est variable soit je cherche 'jour, nb' soit 'mois,nb' soit 'annee,nb'
je peux pas mettre SELECT $unit,nb FROM où $unit serait egal à jour ou mois ou annee
Pour ce que je veux faire je pense que c'est un peu plus compliqué que ça.
en fait dans mon admin je peux choisir d'afficher les stats pour la semine, le mois, l'annee ou pour une periode
pour afficher le total par page pour la periode choisie ya pas de probleme je fais comme ça :
$sql = mysql_query("SELECT page,nb FROM stats WHERE jour<='$jourfin' AND jour>='$jourdebut' AND mois<='$moisfin' AND mois>='$moisdebut' AND annee<='$anneefin' AND annee>='$anneedebut'") or die ('EREEUR SQL ! '.$sql. mysql_error());
while($data = mysql_fetch_array($sql)){
$page = $data['page'];
$nb = $data['nb'];
$okpage = 0;
$sql2 = mysql_query("SELECT * FROM statgenpage WHERE page='$page'");
if($data2 = mysql_fetch_array($sql2)){
$okpage=1;
}
if($okpage == 0){
$sql3 = mysql_query("INSERT INTO statgenpage VALUES('','$page','$nb')");
}
else{
$sql3 = mysql_query("UPDATE statgenpage SET nb=nb+'$nb' WHERE page='$page'");
}
}
echo "\";
$sql2 = mysql_query(\"SELECT page,nb FROM statgenpage ORDER BY num\");
while($data2 = mysql_fetch_array($sql2)){
$page = $data2['page'];
$nb = $data2['nb'];
echo \"----
".$page." :, ".$nb." visites, \";
}
echo "
";
$sql3 = mysql_query("DELETE FROM statgenpage");
Mais si je veux pour la periode choisie afficher le meme resultat jour par jour ou mois par mois ou anne par annee (pas avoir le total comme au-dessus)
il faut que je fasse la meme chose mais par exemple pour un affichage mois par mois :
pour janvier
$sql = mysql_query("SELECT page,nb FROM stats WHERE jour<='$jourfin' AND jour>='$jourdebut' AND mois=01 AND annee<='$anneefin' AND annee>='$anneedebut'") or die ('EREEUR SQL ! '.$sql. mysql_error());
pour fevrier
$sql = mysql_query("SELECT page,nb FROM stats WHERE jour<='$jourfin' AND jour>='$jourdebut' AND mois=02 AND annee<='$anneefin' AND annee>='$anneedebut'") or die ('EREEUR SQL ! '.$sql. mysql_error());
pour mars
$sql = mysql_query("SELECT page,nb FROM stats WHERE jour<='$jourfin' AND jour>='$jourdebut' AND mois=03 AND annee<='$anneefin' AND annee>='$anneedebut'") or die ('EREEUR SQL ! '.$sql. mysql_error());
...
j'ai pas envie de faire 12 requete pour un affichage mois par mois et 31 pour un affichage jour par jour !!!
stiml
Messages postés132Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention18 juin 2009 9 mars 2006 à 10:51
salut,
Voici le code que tu a donné :
exemple :
$sql1 = mysql_query("SELECT * FROM table WHERE page='index'");
$sql2 = mysql_query("SELECT * FROM table WHERE page='forum'");
$sql3 = mysql_query("SELECT * FROM table WHERE page='photos'");
$sql4 = mysql_query("SELECT * FROM table WHERE page='contact'");
$sql5 = mysql_query("SELECT * FROM table WHERE page='membres'");
remplacer par : (si possible)
$champ = array(index,forum,photos,contact,membres);
$sql = mysql_query("SELECT * FROM table WHERE page='$champs'");
je pense qu'il faut que tu mette une boucle exemple :
$champ = array(index,forum,photos,contact,membres);
for ($i=1;$i=count($champ);$i++)
{
$sql = mysql_query("SELECT * FROM table WHERE page='$champs'");
}
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013 9 mars 2006 à 23:27
non ca ne fonctionne pas.
537795 stiml --> la boucle for ne fonctionne pas, c'a prend beaucoup trop de temps
j'ai essayé tout simplement
$champ = array(index,forum,photos,contact,membres);
for ($i= 1;$i=count($champ);$i++)
{
echo "champ : ".$champ."
";
}
et cela m'affiche champ : array sur une centaine de ligne ( a peu pres j'ai pas compté !)
AshenShugar --> ca ne fonctionne pas j'ai rien qui s'affiche ni d'erreur sql ni de resultats voici le script :
$champ = array(01,02,03,04,05,06,07,08,09,10,11,12);
$sql1 = mysql_query("SELECT mois,nb FROM stats WHERE mois IN ('" . explode("','", $champ) . "') AND annee='2006' ") or die ('ERREUR SQL ! '.$sql1. mysql_error());
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013 11 mars 2006 à 16:27
ca fonctionne impec !!
j'ai juste un petit probleme que je n'arrive pas résoudre :
j'ai fait
$champ_mois = array(01,02,03,04,05,06,07,08,09,10,11,12);
$sql2 = mysql_query("SELECT jour,mois,nb FROM stats WHERE mois IN (" . implode(",", $champ_mois) . ") AND annee='2006' ") or die ('ERREUR SQL ! '.$sql1. mysql_error());
ca m'affiche tout les resultats de l'anne 2006 avec les jours et les mois sans probleme
(je pourrais m'en servir pour un affichage mois par mois en enlevant les jours qui me seront inutiles, ici c'etait juste pour verif)
et j'ai fait la meme chose pour un affichage jour par jour pour le mois de fevrier:
$champ_jour = array(01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
echo " Mars
";
$sql1 = mysql_query("SELECT jour,nb FROM stats WHERE jour IN (" . implode(",", $champ_jour) . ") AND mois='02' AND annee='2006' ") or die ('ERREUR SQL ! '.$sql1. mysql_error());
ca fonctionne sauf pour les jours 08 et 09 qui ne sont pas affichés !!
et mon probleme est là.
Je ne comprends pas que lorsque je cherche par mois ca m'affiche bien les jours 08 et 09 de chaque mois, mais quand je cherche par jour ces deux jours là ne sont pas affichés, je ne comprends pas !!
mais bon pour l'instant l'affichage mois par mois fonctionne c'est deja ça, pour l'affichage jour par jour au pire je rajouterais deux requetes pour ces jours la (c'est toujours mieux que 31 !!)
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013 11 mars 2006 à 17:11
encore une question j'ai remplacé la requete comme ça :
$champ_jour = array(01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
$jour_req = implode(",", $champ_jour);
$sql1 = mysql_query("SELECT jour,nb FROM stats WHERE jour IN (" . $jour_req. ") AND mois='$moisfin' AND annee='$anneefin' ") or die ('ERREUR SQL ! '.$sql1. mysql_error());
comme j'utilise la meme requete pour un affichage jour par jour pour la semaine et pour le mois
je definie le jour de debut ($jourdebut) et le jour de fin ($jourfin) pour la recherche
$jourfin est egale a date("d");
et $jourdebut est egale à 01 si c'est pour le mois et à $jourfin - 6 si c'est pour la semaine
donc pour la semaine j'aurais souhaite mettre la requete entre un if de ce style :
est-ce qu'il est possible de choisir sur toute la chaine de characteres sont que l'on veut pour par exemple un affichage entre le 05 et le 11 n'avoir que :
cs_AshenShugar
Messages postés202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 11 mars 2006 à 22:07
Alors là, je ne comprends pas ... :(( Qu'il retire les 0 devant 1, 2,
3, etc... c'est normal, il les interprète comme des entiers, mais
pourquoi il garde les 0 pour le 8 et 9 ... C'est un mystère pour moi !
Mais dans ce cas, pourquoi ça ne te le fait pas pour les mois ?!?!
Le hardware, c'est sur quoi l'on tape lorsque le software merde...
cs_joebuz
Messages postés321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 février 2013 12 mars 2006 à 02:03
pour le mois ca ne me le fais pas car les jours sont pris dans la table donc ca les affiche bien et pour les mois comme j'ai pas encore aout et septembre d'enregistré ca ne me le fais pas sinon je pense que ce serait le meme probleme