我有一张桌子 `
name id date login logout
arjun 1 2012-11-28 9-30 7-30
arjun 1 2012-11-29 9-30 8-00
arjun 1 2012-11-30 9-40 8-00`
我希望将此表视为
`
name id date login logout
2012-11-28 9-30 7-30
arjun 1 2012-11-29 9-30 8-00
2012-11-30 9-40 8-00`
这可能吗?如果是这样的话?
答案 0 :(得分:0)
你可以用mysql的group_concat
来做Select
name ,
id ,
group_concat(date) as `Date`,
group_concat(login) as login_time,
group_concat(logout) as logout_time
from mytable
group by name
在前端,您可以根据需要使用循环显示。如果你使用的是php,你可以使用php的爆炸功能。如果还有别的东西,那么试着找出如何爆炸细胞的价值。
答案 1 :(得分:0)
假设您的表名为'table55'
然后使用以下查询创建存储过程
delimiter |
create procedure testProcedure()
BEGIN
declare flag1 int default 0;
DECLARE done INT DEFAULT FALSE;
declare tempid int;
declare tempdate date;
declare tempname,templogin,templogout varchar(50);
DECLARE cur1 CURSOR FOR SELECT * from table55 where `name` like 'arjun' and id=1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
drop table if exists mytemptable;
CREATE TEMPORARY TABLE IF NOT EXISTS mytemptable ( `name` VARCHAR(50) NULL DEFAULT NULL,
`id` INT(11) NULL DEFAULT NULL,
`date` DATE NULL DEFAULT NULL,
`login` VARCHAR(50) NULL DEFAULT NULL,
`logout` VARCHAR(50) NULL DEFAULT NULL);
OPEN cur1;
read_loop: LOOP
FETCH cur1 into tempname,tempid,tempdate,templogin,templogout;
if flag1=0 then
insert into mytemptable(name,id,`date`,login,logout) values (tempname,tempid,tempdate,templogin,templogout);
set flag1=1;
else
insert into mytemptable(name,id,`date`,login,logout) values ('',null,tempdate,templogin,templogout);
end if;
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
select * from mytemptable;
END
|
delimiter;
您只需运行一次以上查询。之后,您可以使用以下查询来获取所需的结果
call testProcedure