0

我有一张类似`的桌子

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`

这可能吗?如果是这样怎么办?

4

2 回答 2

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的explode函数。如果还有其他问题,请尝试找出如何分解单元格值。

于 2012-11-30T05:41:13.273 回答
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
于 2012-11-30T06:46:43.310 回答