Προς το περιεχόμενο

Πινακάκι στατιστικων στοιχήματος


heavyaris

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα, θα ήθελα να σχεδιάσω ένα πινακάκι σαν αυτά τα 2: http://www.kerdoskopos.com/bet_15/tameio----bet-stats.html

το πρώτο "Overall Statistics" είναι για όλα τα έτη, από την στιγμή που τρέχει η ιστοσελίδα, το έχω κάνει ήδη. αυτό που με "ψαρώνει" είναι το δεύτερο.

Ας τα πάρουμε τα πράματα όμως ένα-ένα, στο πεδίο επιλογής έτους καταλαβαίνω ότι πρέπει να κάνω select distinct απο την βάση, αλλά το πεδίο της mysql είναι date, πχ 2009-12-31. Πως θα μπορούσα να πάρω μόνο το έτος;

ευχαριστώ

Δημοσ.

εγώ έχω εγγραφές στη βάση απο το 2008 έως σήμερα και για όλη την διάρκεια ζωής της ιστοσελίδας, όπως και στο παράδειγμα θα ήθελα το drop down να βγάζει μόνο το έτος.

αυτό που ρωτάς θα είναι το δέυτερο στάδιο, απλά πρώτα ξεκίνησα να ρωτήσω για το drop down.

ευχαριστω.

Δημοσ.

>mysql_query("SELECT * FROM yourtable WHERE YEAR(date_record) ='2009'")

 

 

αυτο ?

 

η

 

 

>echo 'Year : <select name="dropdown">';
for($i=2005;$i<=date('Y');$i++){
echo '<option value="'.$i.'">'.$i.'</option>';
}
echo '</select>';

Δημοσ.

με ενδιαφέρει το δεύτερο, αλλά όχι να βάζω εγώ της ημερομηνίες ή να γεμίζουν με λούπα, να διαβάζονται απο τα πεδία τις εγγραφής πχ αν είχα 2 πεδία: 2009-31-1 και 2010-25-9 να έβγαζε το drop down 2009,2010

Δημοσ.

ωραία μπορείς να κάνεις

>
$min_query = mysql_query("SELECT date_record FROM yourtable ORDER BY date_record LIMIT 1") or die(mysql_error());
$max_query = mysql_query("SELECT date_record FROM yourtable ORDER BY date_record DESC LIMIT 1") or die(mysql_error());

έτσι έχεις την min και max ημερομήνια των εγγραφών σου ! με τα παραπάνω τώρα μπορείς να φτιάξεις την for σου για να βγάλεις αυτό που θες !

Δημοσ.

ευχαριστώ πολύ για την απάντηση.

λές δηλαδή να πάρω τα 2 άκρα των ημερομηνιών πχ 2008-1-31 και 2013-12-31.

και απο αυτά θα βγάλω το drop down έτσι:

post-145960-0-32245200-1297855249_thumb.jpg

Δημοσ.

Μπορείς και μόνο με ένα query:

>
$years = array();
$query = "SELECT date_record FROM yourtable ORDER BY date_record";  // Διαλέγεις όλες τις εγγραφές του πεδίου 'date_record'
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
 array_push($row['date_record'], $years);                          // Φτιάχνεις ένα array με τις εγγραφές αυτές
}
$years = array_unique($years);                                      // Σβήνεις τις όποιες διπλοεγγραφές (αν έχεις 2 φορές το 2009 το βάζεις μόνο μια φορά στο array)
print "<select name='select_year'>";
foreach ($years as $year){
 print "<option value='".$year."'>".$year."</option>";             // Βάζεις για option στο select τις χρονιές που έχεις στο array
}
print "</select>";

Δημοσ.

Μπορείς και μόνο με ένα query:

>
$years = array();
$query = "SELECT date_record FROM yourtable ORDER BY date_record";  // Διαλέγεις όλες τις εγγραφές του πεδίου 'date_record'
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
 array_push($row['date_record'], $years);                          // Φτιάχνεις ένα array με τις εγγραφές αυτές
}
$years = array_unique($years);                                      // Σβήνεις τις όποιες διπλοεγγραφές (αν έχεις 2 φορές το 2009 το βάζεις μόνο μια φορά στο array)
print "<select name='select_year'>";
foreach ($years as $year){
 print "<option value='".$year."'>".$year."</option>";             // Βάζεις για option στο select τις χρονιές που έχεις στο array
}
print "</select>";

ναι, αλλά στο πεδίο δεν έχω μόνο χρονολογία αλλά έτος-μηνα-μερα

Δημοσ.

Μπορείς και μόνο με ένα query:

>
$years = array();
$query = "SELECT date_record FROM yourtable ORDER BY date_record";  // Διαλέγεις όλες τις εγγραφές του πεδίου 'date_record'
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
 array_push($row['date_record'], $years);                          // Φτιάχνεις ένα array με τις εγγραφές αυτές
}
$years = array_unique($years);                                      // Σβήνεις τις όποιες διπλοεγγραφές (αν έχεις 2 φορές το 2009 το βάζεις μόνο μια φορά στο array)
print "<select name='select_year'>";
foreach ($years as $year){
 print "<option value='".$year."'>".$year."</option>";             // Βάζεις για option στο select τις χρονιές που έχεις στο array
}
print "</select>";

Με 10.000 έγραφες τι θα συμβεί με αυτό τον κώδικα ?

Δημοσ.

Σε πίνακα με 100.000 εγγραφές μου έκανε περίπου 1.01-1.06 δευτερόλεπτα.

 

Το μέτρησα ως εξής:

 

>
/*   
*    Δημιουργώ τον πίνακα entries στη βάση test της MySQL:
*   +------+------+
*   |  id  | date |
*   +------+------+
*/

 

Αρχείο που έβαλε 100.000 τυχαίες (από 1900 ως 2011) εγγραφές στον πίνακα 'entries' της βάσης 'test':

>
<?php
 // κώδικας που ανοίγει τη βάση

 for ($i=1; $i<100001; $i++){
   mysql_query("INSERT INTO `test`.`entries` (`id`, `date`) VALUES (".$i.", ".rand(1900, 2011).")");
 }
?>

 

Αρχείο που έφτιαξε το τελικό dropdown και μέτρησε και το χρόνο εκτέλεσης σε δευτερόλεπτα. Τρέχει τον κώδικα 5 φορές (μπορείς να αλλάξεις και να το τρέξεις όσες φορές θέλεις), και μετράει χρόνους για κάθε τεστ, συνολικό, μέσο χρόνο, αριθμό σειρών και ταχύτητα σε σειρές ανά δευτερόλεπτο:

>
<?php
function getTime() {
   $timer = explode( ' ', microtime() );
   $timer = $timer[1] + $timer[0];
   return $timer;
}

function looptest($e){
 $values = array();
 $mtime = array();
 print "<h1>Running the script $e times:</h1>";
 for ($i=1;$i<$e+1;$i++){
   $values = test($i);
   $mtime[$i] = $values['time'];
   $rows = $values['rows'];
 }
   print "<br /><br /><strong>Script time</strong>: ".array_sum($mtime)." sec".
     "<br /><strong>Average script time</strong>: ".array_sum($mtime)/count($mtime)." sec".
     "<br /><strong>Parsed</strong>: ".$rows*$e." rows (".$e." times, ".$rows." rows each time)".
     "<br /><strong>Average speed</strong>: ~".round($rows*$e/array_sum($mtime), 2)." rows per second";
}

function test($e){
 $start = getTime();
 // κώδικας που ανοίγει τη βάση
 $years = array();
 $query = "SELECT * FROM entries ORDER BY date";  // Διαλέγεις όλες τις εγγραφές του πεδίου 'date_record'
 $result = mysql_query($query);
 while ($row = mysql_fetch_array($result)){
   array_push($years, $row['date']);                          // Φτιάχνεις ένα array με τις εγγραφές αυτές
 }
 $rows = mysql_num_rows($result);
 mysql_close($link);
 $years = array_unique($years);                                      // Σβήνεις τις όποιες διπλοεγγραφές (αν έχεις 2 φορές το 2009 το βάζεις μόνο μια φορά στο array)
 print "<select name='select_year' style='position: relative; float: left; clear: both; margin-right: 2em;'>";
 foreach ($years as $year){
   print "<option value='".$year."'>".$year."</option>";             // Βάζεις για option στο select τις χρονιές που έχεις στο array
 }
 print "</select>";
 $end = getTime();
 $time = round($end - $start,4);
 print "<span style='color: #666; font-size: 0.8em; font-style: italic;'><strong>Script time #$e</strong>: $time  sec</span><br /><br />";
 return array('time' => $time, 'rows' => $rows);
}

looptest(5); // Δώσε για όρισμα πόσες φορές θέλεις να τρέξει το τεστ

?>

 

Εκδόσεις Apache, PHP, MySQL:

>
Apache: 2.2.15
PHP: 5.3.3
MySQL: 5.5.8

 

Χαρακτηριστικά υπολογιστή στον οποίο τρέξανε τα τεστ:

>
CPU: 2.4 GHz Intel Core 2 Duo
RAM: 2Gb 667MHz DDR2 SDRAM
OS: Mac OS X 10.6.6

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...