我正在涉足pChart,并想从一个简单的线形图开始,它显示了随着时间的推移会员人数的增长。
Y轴将是成员数
X轴就是时间
对于每个时间数据点,我需要一个对应的总成员数据点。
我的user表的结构是:[user_id] [join_date]
今天早上我在上班的公交车上想到的方法是:
$Q = " SELECT MONTH(join_date), DAY(join_date), COUNT(user_id)"
. " FROM user_basic_data GROUP BY join_date";
$R = mysql_query($Q);
$dateS = '';
$totalS = '';
$c = 0; // total members counter
while ($row = mysql_fetch_row($R)) {
$dateS .= $row[0].'-'.$row[1].','; // month-day,month-day,month-day
$c = $row[2] + $c; // new total for new date
$totalS .= $c.','; // total1,total2,total3
}
// trim trailing commas
$dateS = substr($dateS, 0, -1);
$totalS = substr($totalS, 0, -1);
echo "<p>$dateS</p>"; // Ex: 8-10,8-15,8-20
echo "<p>$totalS</p>"; // Ex: 12,17,23这些字符串格式是pChart喜欢的数据格式,我知道当前的查询也需要一个年份值才能真正使用,所以请不要在这些点上挂断。
我想知道是否有更好的方法来获得随着时间的推移不断变化的会员总数。我猜在MySQL中处理它会更快,但我想不出一种方法。
谢谢您抽时间见我。
发布于 2010-08-20 09:44:58
要获得运行总数,请使用:
SELECT DISTINCT
DATE(ubd.join_date) AS dt,
(SELECT COUNT(*)
FROM user_basic_data t
WHERE DATE(t.join_date) <= DATE(ubd.join_date)) AS num_users
FROM user_basic_data ubd 通过将If you still want Month-Day - use DATE_FORMAT替换为以下内容,DATE返回YYYY-MM-DD;DATE(udb.join_date)格式的日期:
DATE_FORMAT(ubd.join_date), '%m-%d')您不需要在PHP中创建逗号分隔列表的逻辑-只需填充两个变量:
$Q = " SELECT GROUP_CONCAT(x.dt) AS dates,
GROUP_CONCAT(x.num_users) AS totals
FROM (SELECT DISTINCT
DATE(ubd.join_date) AS dt,
(SELECT COUNT(*)
FROM user_basic_data t
WHERE DATE(t.join_date) <= DATE(ubd.join_date)) AS num_users
FROM user_basic_data ubd ) x";
$R = mysql_query($Q);
while ($row = mysql_fetch_row($R)) {
echo "<p>$row[0]</p>"; // Ex: 8-10,8-15,8-20
echo "<p>$row[1]</p>"; // Ex: 12,17,23
}https://stackoverflow.com/questions/3527610
复制相似问题