Page 1 sur 2

requete dans un tableau

Posté : 02 mai 2006, 18:53
par konjiki
salut a tous,
alors voila, je doit compter des identifiants dans une base de données en fonction du temps ( sur 1 semaine en fait)
voila ce que j'ai fais:
//test attention si valeur < 10 le 0 disparait
$day='27';
$annee='03';
$month='08';
$daym=$day-1;


$jours=array("","lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"); // on ne met rien au depart pour pouvoir compter les jours de 1 à 7
$joursemaine=7;
$jourcourant=date('w')-1; //-1 car on commence la semaine dimanche

for($i=1; $i<=6;$i++){
$req="select count(id) from news where `timestamp` between 20$annee$month$daym and 20$annee$month$day";
$daym=$daym-1;
$day=$day-1;
//print_r($req);
$query=mysql_query($req);
$result=mysql_fetch_array($query);
print_r($result);
le probleme c'est que j'aimerai que les valeurs soient directement dans un tableau pour l'affichage. j'ai essayé la solution du type
$result=mysql_fetch_array($query);
$result=$tab[$i];
mais sans resultat :( . Merci pour votre future aide :wink:

Posté : 02 mai 2006, 23:43
par Cyrano
Salut,
d'abord, aère donc un peu ton code pour le rendre lisible, ensuite, comme tu n'attends qu'une unique donnée, au lieu de mysql_fetch_array(), utilise mysql_result() et utilise des concaténations pour contstruire tes timestamps:
<?php
//test attention si valeur < 10 le 0 disparait
$day   ='27';
$annee ='03';
$month ='08';
$daym  =$day-1;


$jours=array("","lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"); // on ne met rien au depart pour pouvoir compter les jours de 1 à 7
$joursemaine=7;
$jourcourant=date('w')-1; //-1 car on commence la semaine dimanche

for($i = 1; $i <= 6; $i++)
{
    $req  = "SELECT COUNT(id) FROM news WHERE `timestamp` BETWEEN 20". $annee . $month . $daym ." and 20". $annee . $month . $day ."";
    $daym = $daym - 1;
    $day  = $day - 1;
    //print_r($req);
    $query  = mysql_query($req);
    $result = mysql_result($query, 0);
    print_r($result);
    //...
?>

Posté : 03 mai 2006, 09:16
par konjiki
ok ca marche sauf quand je met la requete avec la concaténation j'ai une erreur du type
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /var/www/html/projet ent/elements/tab_jours.php on line 28
Encore une petite question le resultat m'affiche tous les resultats, comment je fais si je veux afficher un seul resultat, par exemple $i=3?. Merci

Posté : 03 mai 2006, 09:19
par Vaedan
Tu as fait une erreur dans la requete SQL.
$query  = mysql_query($req) or die( $req . '<br />' . mysql_error() );

Posté : 03 mai 2006, 09:19
par Cyrano
Je ne me suis pas attardé à l'organisation de ton code, mais de toutes façons, la requête à l'intérieur de la boucle, c'est une mauvaise idée au départ. Ensuite, tu peux toujours ajouter une clause WHERE à la requête pour spécifier une condition particulière.

Posté : 03 mai 2006, 09:26
par konjiki
En gros ce que je dois faire c'est compter un nombre d'id pour un certain jour et les 6 jours qui précedent. J'avai pensé que la boucle serai une bonne idée mais si va pas je suis pret à écouter tes conseils :merci:

Posté : 03 mai 2006, 10:07
par Cyrano
ben place ta requête AVANT la boucle : tu récupères les résultats dans un tableau indexé : fais la boucle sur ce tableau, ce sera plus performant pour la simple raison qu'il n'y aura qu'une seule connexion avec ta base de données au lieu d'une par tour de boucle :arrow: moins d'utilisation des ressources réseau.

Là, je ne suis pas certain de la nature exacte des informations que tu veux retrouver, mais à priori, je suis tenté de croire que tu peux tout extraire correctement trié avec un GROUP BY pour avoir des données comptées par périodes. Il y a donc lieu d'améliorer au niveau de la construction de ta requête SQL.

Posté : 03 mai 2006, 10:30
par konjiki
j'entend bien mais la boucle est faite pour la requete. Elle permet de décrémenter les jours. y at il moyen de rentrer les resultats de la boucle dans une ligne de tableau differente à chaque fois?

------
req1-
------
req2-
------
req3-
------
je viens d'essayer avec "mysql_fetch_row" mais comme c'est une boucle ça ecrase la valeur à chaque fois. help :cry:

Posté : 03 mai 2006, 10:57
par Cyrano
Je ne sais toujours pas ce que tu veux faire, je ne peux donc pas répondre. Donne un exemple pour illustrer ce que tu veux faire, je suis pas voyante-extra-lucide ;)

Posté : 03 mai 2006, 11:44
par konjiki
je vais essayer d'être le plus claire possible, j'aimerai mettre les resultats de ma requete dans un tableau pour pouvoir ensuite traiter chaque élements. Pour l'instant toutes les valeurs sont dans une seule case du tableau or ce n'est pas ce que je souhaite. mon but est de remplir un tableau et dans chaque case il doit y avoir le resultat d'un requete (exemple avec $i=2 ou $i=3). J'espere avoir été claire :wink:

Posté : 03 mai 2006, 12:45
par Cyrano
Ça, c'est ce que tu veux obtenir, mais il manque la partie en amont : comment sont structurées les données dans la base, réparties comment sur combien de tables et met des exemples : telle table, tel champ, données du genre "xyz", table 2 avec tel champ et données du genre "abc" : le lien entre les tables en question et ce que tu veux obtenir au final.

Là ce sera clair.

Posté : 03 mai 2006, 13:17
par konjiki
alors voila la table, elle est seule (dans un premier temps). Je cherche à compter les "id" en fonction de `timestamp`. Plus exactement je prend la date courante et je compte les "id" sur les 6 jours qui précedent la date courante

Code : Tout sélectionner

+--------------+-------------+------------------------+ |Champ |Type | | +--------------+-------------+------------------------+ |id |int(6) | | |topic_id |int(3) | | |section_id |int(3) | | |author_id |int(6) | | |lang_id |int(2) | | |user_id |int(6) | | |state |int(1) | | |main_page |int(1) | | |timestamp |timestamp | 0000-00-00 00:00:00 | |title |varchar(150) | latin1_swedish_ci | |date |int (8 | | |departement |tinytext | latin1_swedish_ci | |ip |varchar(9) | latin1_swedish_ci | +--------------+-------------+------------------------+
Comme je décrémente les jours je me suis dit que faire une boucle pour la requete pourrait etre une bonne idée (a priori peut etre pas :oops: ) ensuite je voudrai mettre le resultat des requetes dans un tableau pour l'affichage.
Voila je crois que j'ai tout dit. :D

Posté : 03 mai 2006, 13:31
par Cyrano
Voila je crois que j'ai tout dit. :D
Je ne crois pas, tu ne donnes que la première partie de la réponse. J'ai remis ton truc en forme pour que ce soit lisible, maintenant, relis ma précédente question (complètement) et finis la réponse.

Comprends bien que si c'est clair pour moi, c'est que tu auras bien expliqué le problème : ce qui signifie également que tu l'auras bien assimilé toi-même... et tu auras donc trouvé toi-même les 3/4 de la réponse.

Posté : 03 mai 2006, 14:05
par konjiki
je vais essayer de repondre,
comment sont structurées les données dans la base, réparties comment sur combien de tables
donc 1 base de donnée repartie sur 33 tables, et pour le moment je travaille sur la table decrite dessous.
le lien entre les tables en question et ce que tu veux obtenir au final
je voudrai mettre le resultat des requetes dans un tableau pour l'affichage.

Je ne suis pas sur d'avoir bien compris la question donc excuse moi si c'est pas très claire (desolé d'être un newbiz) :merci:

Posté : 03 mai 2006, 14:07
par Cyrano
...comment sont structurées les données dans la base, réparties comment sur combien de tables et met des exemples : telle table, tel champ, données du genre "xyz"... et ce que tu veux obtenir au final.

Là ce sera clair.