Bir veritabanındaki değerleri düzenlemek için kod Etkinliği

2 Cevap php

Ben bu formatta benim veritabanının veri koymak zorunda (değerler tabii ki farklı olacaktır), ben bir ilişkisel dizi (I terminoloji ile korkunç değilim) denir düşünüyorum.

$values=array(
        	"Jan" => 110,
        	"Feb" => 130,
        	"Mar" => 215,
        	"Apr" => 81,
        	"May" => 310,
        	"Jun" => 110,
        	"Jul" => 190,
        	"Aug" => 175,
        	"Sep" => 390,
        	"Oct" => 286,
        	"Nov" => 150,
        	"Dec" => 196
    );

İşte geliştirilen ne:

	$sql = "SELECT MONTH(AddDate) AS Date, column_name FROM table ORDER BY AddDate ASC";
	$res = mysql_query($sql) or die(mysql_error());
	$prev_date = null;

$values=array();

while ( $row = mysql_fetch_assoc($res) ) {
	if ( $row['Date'] != $prev_date) {
		$month = $row['Date'];
		$sql = "SELECT count(MONTH(AddDate)) AS EntryAmount FROM `table` WHERE MONTH(AddDate)=$month ";
		$countResults = mysql_query($sql) or die(mysql_error());
		if( $entryAmount = mysql_fetch_array($countResults) ) {
			$values[$row['Date']] =  $entryAmount['EntryAmount'];
		}
		$prev_date = $row['Date'];
	}
}

Çıktı:

Array ( [9] => 999 [10] => 986 [11] => 264 )

2 Cevap

Tek bir sorguda tüm bu yapabilirsiniz:

select month(AddDate) as theMonth,
       count(*) as numberOfRows
from   `table`
group by theMonth
order by theMonth

Sonra dış döngü uzağa gider ve iç döngü olur:

if( $row = mysql_fetch_array($results) ) 
{
    $values[$row['theMonth']] = $row['numberOfRows'];
}

Bu orta ölçekli veri setleri için fark daha iyi yapmalıdır. month işlevini kullanarak, size başka kullanmak mümkün olabilir indeksler herhangi bir yararı kaybetmek olduğunu, ancak, not yapmak.

(test değil) GROUP BY kullanarak:

$sql = "SELECT MONTH(AddDate) AS Date, count(AddDate) AS EntryAmount FROM table ORDER BY AddDate ASC GROUP BY MONTH(AddDate)";
$res = mysql_query($sql) or die(mysql_error());
$values=array();

while ( $row = mysql_fetch_assoc($res) ) {
    $values[$row['Date']] =  $row['EntryAmount'];
}