MySQL 隨筆

guyun發表於2019-04-18
// 統計一週前,不同網站的統計量
SELECT DATE_FORMAT(create_time,'%Y%m%d') as ymd, user_from AS site, COUNT(*) total FROM {$table_pop_user} WHERE user_from IN ($find_str_site) AND create_time BETWEEN SUBDATE(DATE( NOW() ),INTERVAL 6 DAY) AND NOW() GROUP BY ymd, user_from

// PHP處理sql查詢結果

$_data = array();
foreach ($data as $val) {
    $_data[$val['site']][$val['ymd']] = $val['total'];
}

$site_count = $days = array();
for ($i = 6; $i >= 0; $i--) {
    $days[] = $day = date('Ymd', strtotime("-{$i} day"));

​    foreach ($site as $_site) {
​        $site_count[$_site][] = isset($_data[$_site][$day]) && !empty($_data[$_site][$day]) ? $_data[$_site][$day] : 0;
​    }
}

既讓每個名字都只出現一次,又能夠顯示所有的名字相同的人的id呢?——使用group_concat()

1、功能:將group by產生的同一個分組中的值連線起來,返回一個字串結果。

2、語法:group_concat( [distinct] 要連線的欄位 [order by 排序欄位 asc/desc ] [separator '分隔符'] )

說明:通過使用distinct可以排除重複值;如果希望對結果中的值進行排序,可以使用order by子句;separator是一個字串值,預設為一個逗號。

本作品採用《CC 協議》,轉載必須註明作者和本文連結