Avatar billede purup Nybegynder
21. marts 2007 - 14:32 Der er 16 kommentarer og
1 løsning

udprint af mysql query

Hej Eksperter

Efter et query:
$query = "SELECT DATE(timeStamp) AS dato, COUNT(timeStamp) AS antal FROM tntDemolished GROUP BY DATE(timeStamp)";
...har jeg en array med dato, antal som jeg printer på en lang liste. Men, dage med antal 0 bliver klart nok ikke printet.
Jeg forestiller mig en forløkke i php som også printer manglende dage med antal 0.
Avatar billede jakobdo Ekspert
21. marts 2007 - 15:45 #1
Prøv at kald SQL'en i PHPMYADMIN, får du det resultat du forventer?
Avatar billede purup Nybegynder
21. marts 2007 - 15:56 #2
Ja, det gør jeg. F.eks.:
01-01-07, 1
02-01-07, 3
03-01-07, 2
05-01-07, 3
Med     while($a = mysql_fetch_row($result)) print... udskriver jeg så resultatet. Problemet er, at 04-01-07 ikke bliver printet - fordi den ikke er repræsenteret i array'et.
Jeg ville gerne have at også 04-01-07, 0 blev printet.
Det kunne være, tænkte jeg, med en lidt mere advanceret for-løkke der udskriver, eller et nyt query (men det tror jeg ville et meget tungt query)
Avatar billede jakobdo Ekspert
21. marts 2007 - 16:05 #3
Vil det altid være for måneden?
For du kunne jo godt lave et hack, som løber en måned igennem og sammenligner med dit resultat.
Avatar billede purup Nybegynder
21. marts 2007 - 18:32 #4
nej... jeg havde egentlig skrevet det som dd-mm-yy. Det er meningen at den skal printe alle dage
Avatar billede jakobdo Ekspert
21. marts 2007 - 18:36 #5
Alle dage?
Fra år 0 til år 10000000?
Då må vel have en begrænsning på et eller anden måde.
Avatar billede purup Nybegynder
21. marts 2007 - 18:44 #6
Fra første dato i array'et til sidste - det er foreløbig bare 3 måneder, men det er planen at det skal kunne klare flere år
Avatar billede purup Nybegynder
21. marts 2007 - 18:57 #7
Egentlig kan du se her www.gun.dk/statistics (gun er mit ekspiriment website)
Den blå graf viser antallet af "eksploderede tanks i TNTspillet" ud fra en tabel hvor hver række, timeStamp(datetime), players(tinyint), ip(varchar(20)) repræsenterer en eksploderet tank. Hver søjle er en dag, højden viser antal eksploderede tanks.
Dage hvor ingen spiller, er der ingen rækker, og derfor mangler der en søjle med højden 0. Grafen er derfor "falsk", men du forstår problemet?
Avatar billede jakobdo Ekspert
21. marts 2007 - 22:09 #8
Måske du kan bruge denne kode til at komme videre med?

<?php
//http://www.eksperten.dk/spm/769257

$startDato = mktime(0,0,0, 1, 1,2001); //MÅNED, DAG og ÅR (lad 0,0,0 stå)
$slutDato  = mktime(0,0,0,12,31,2003); //MÅNED, DAG og ÅR (lad 0,0,0 stå)
$enDag    = 60*60*24; //SEKUNDER * MINUTTER * TIMER = 1 DAG

for($i = $startDato; $i < $slutDato; $i+=$enDag)
{
    echo date("M-d-Y", $i);
    echo "<br />";
}

?>
Avatar billede jakobdo Ekspert
21. marts 2007 - 22:10 #9
Avatar billede johan.o Nybegynder
22. marts 2007 - 09:48 #10
Måske du kan bruge det her til noget :

<?php
$start="";
while($a=mysql_fetch_row($query)) {
if($start=="") { $start=$a['timestamp']; }
while($a['timestamp']>$start) {
  print $start;
  $start=mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("Y", $start)); }
print $a['timestamp']; }
$start=$a['timestamp'];
$today=mktime(0, 0, 0, date("m"), date("d"), date("Y"));
while($start<$today) {
$start=mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("Y", $start));
echo strftime("", $start); }

?>

Det er ikke 'copy paste' kode :), men ide'en er måske noget du kan bruge.

Skriv hvis jeg skal forsøge at forklare.

Mvh. Johan
Avatar billede johan.o Nybegynder
22. marts 2007 - 09:52 #11
Arh, der manglede vist i hvertfald et tegn...dette her er måske mere overskueligt, men stadig ikke copy paste :

$start="";

while($a=mysql_fetch_row($query)) {
if($start=="") { $start=$a['timestamp']; }

while($a['timestamp']>$start) {
  echo strftime("", $start);
  $start=mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("Y", $start)); }

echo strftime("", $a['timestamp']); } }

$start=$a['timestamp'];
$today=mktime(0, 0, 0, date("m"), date("d"), date("Y"));

while($start<$today) {
$start=mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("Y", $start));
echo strftime("", $start); }

Mvh. Johan
Avatar billede johan.o Nybegynder
22. marts 2007 - 10:31 #12
He he..så fik jeg lige kigget lidt på det igen, det er altså lidt svært når man ikke kan teste (sidder på arbejde), og der er vist noget koks, men nu er jeg kommet frem til dette....

$start="";

while($a=mysql_fetch_row($query)) {

if($start=="") {
  $start=$a['timestamp'];
  echo strftime("", $start)." Kills : ".$a['kills']; }

while($a['timestamp']>$start) {
  $start=mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("Y", $start));
  if($a['timestamp']==$start) {
  echo strftime("", $start)." Kills : ".$a['kills']; }
  else {
  echo strftime("", $start)." Kills : 0"; } } }

$start=$a['timestamp'];
$today=mktime(0, 0, 0, date("m"), date("d"), date("Y"));

while($start<$today) {
$start=mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("Y", $start));
echo strftime("", $start)." Kills : 0"; }

Mvh. Johan
Avatar billede purup Nybegynder
19. juni 2007 - 15:17 #13
print '<table class="statistic" cellspacing="0" cellpadding="0"><tr class="header"><td>TNT (unfinished)</td></tr>';
                print '<tr class="columnnames"><td>Tanks demolished from xx-xx-xx to xx-xx-xx</td></tr>';
                $query = "SELECT DATE(timeStamp) AS date, COUNT(timeStamp) AS demolished FROM tntDemolished GROUP BY DATE(timeStamp)";
                $result = mysql_query($query, $conn);
               
                print '<tr><td style="padding: 0px;">';
                $start = "";
                while ($a = mysql_fetch_row($result)) {
                    if($start == "") {
                          $start = $a[0];
                          print '<img src="graphic/square.gif" width="3px" height="' . ($a[1]/100) .'px">';
                    };
                    while($a[0] > $start) {   
                        $start=date("Y-m-d", mktime(0, 0, 0, date("n", strtotime($start)), date("j", strtotime($start)) + 1, date("Y", strtotime($start))));                       
                        if($a[0] == $start) {
                            print '<img src="graphic/square.gif" width="3px" height="' . ($a[1]/100) .'px">';
                        } else {
                              print '<img src="graphic/square.gif" width="3px" height="0"px">';
                        };
                    };
                };
                print '</td></tr></table>';
Avatar billede purup Nybegynder
19. juni 2007 - 15:22 #14
Beklager, det tog lang tid. Jeg glemte fuldstændigt projektet, da jeg fik travlt med noget andet. MEN, nu virker det! det kan ses i funktion på www.gun.dk/statistics (den blå graf). Tak for hjælpen begge to.
Løsningen blev ikke helt som foreslået, men noget i den retning (jeg er ikke superkoder så det var det jeg kunne få til at virke)

Man må vel sige at det er Johan O var tættest på løsningen, så pointene er vel dine. Vil du ikke ligge et svar?
Mvh. Mads
Avatar billede johan.o Nybegynder
19. juni 2007 - 16:54 #15
Det var da dejligt du fik det til at virke.

Svaret kommer her :)

Mvh. Johan
Avatar billede purup Nybegynder
19. juni 2007 - 17:06 #16
og tak for hjælpen
Avatar billede johan.o Nybegynder
19. juni 2007 - 22:39 #17
Velbekomme og tak for points :)

Mvh. Johan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester