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 の爆発関数を使用できます。それ以外の場合は、セル値を爆発させる方法を見つけてください。

于 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 に答える