我有一个查询,显示每天的项目数
$query = "SELECT uploadedby, count(item) as item, date_format(uploaddate, '%m-%d-%y') as date FROM `imsexport` GROUP BY uploadedby,date";
$result = mysql_query($query);
结果表看起来像这样
Name item date
Abel Antonio 10 01-02-12
Abel Antonio 5 01-03-12
Abel Antonio 6 01-04-12
Abel Antonio 2 01-05-12
Abel Antonio 1 01-09-12
Abel Antonio 15 01-12-12
Abel Antonio 22 01-16-12
Abel Antonio 15 01-17-12
Abel Antonio 7 01-19-12
Abel Antonio 45 02-15-12
Abel Antonio 31 02-16-12
...other names
我想将日期作为列,以使查询看起来像这样
Name 01-02-12 01-03-12 01-04-12 01-05-12 01-09-12 ....
Abel Antonio 10 5 6 2 1 .....
任何人都知道如何做到这一点?
答案 0 :(得分:0)
所以我认为你想使用动态数量的列来做一个Pivot。这取决于你使用的是什么数据库,但我猜测它是由date_format声明它是MYSQL。这是一个答案的链接,可以做你想要的 - 享受!
https://stackoverflow.com/a/12005676/345659
您的代码应如下所示:
$query = "
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('count(case when date_format(uploaddate, ''%m-%d-%y'') = ''',
date_format(uploaddate, '%m-%d-%y'),
''' then 1 end) AS `',
date_format(uploaddate, '%m-%d-%y'), '`'
)
) INTO @sql
from imsexport;
SET @sql = CONCAT('SELECT uploadedby AS Name, ',
@sql,
' FROM imsexport
GROUP BY Name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;";
$result = mysql_query($query);
我在链接问题中使用bluefeet提供的小提琴中的这些数据:
create table imsexport
(
uniqueID int,
item varchar(10),
uploadedby varchar(50),
uploaddate datetime
);
insert into imsexport values (1, 'Product A', 'Abel Antonio', '2013-01-01');
insert into imsexport values (2, 'Product B', 'Abel Antonio', '2013-01-01');
insert into imsexport values (3, 'Product C', 'Abel Antonio', '2013-01-01');
insert into imsexport values (4, 'Product A', 'Abel Antonio', '2013-01-01');
insert into imsexport values (5, 'Product A', 'Abel Antonio', '2012-01-01');
insert into imsexport values (6, 'Product A', 'Abel Antonio', '2012-01-01');
insert into imsexport values (7, 'Product A', 'Abel Antonio', '2012-01-01');
答案 1 :(得分:0)
处理应用程序级别的显示逻辑。