单独使用连锁结果

时间:2011-12-30 20:06:29

标签: arrays group-concat

我得到了一个复杂的查询,产生了连接结果。但是,虽然GROUP_CONCAT是其他用途所必需的,但我仍然需要能够单独使用连接字符串的各个部分。

GROUP_CONCAT(id, name, date AS concat1

echo $db_field['concat1'];

...生成此输出:IdNameDate,我需要能够分别使用(和回显)Id,Name和Date。我想它必须分配给一个数组,我是PHP的初学者,我真的很感激任何帮助。

为简单起见,上面我使用id代替eventidname代替eventnamedate代替eventstartdate 。以下是完整的代码。

if ($db_found) {
$SQL ="
select sportname, 
tournament_templatename, 
tournament_stagename,   
GROUP_CONCAT(eventid, eventname, eventstartdate SEPARATOR '<br />' ) as concat1
from (
SELECT event.id AS eventid,
event.name AS eventname,
event.tournament_stageFK AS eventtournamentstageFK,
event.startdate AS eventstartdate,
tournament_stage.id AS tournament_stageid,
tournament_stage.name AS tournament_stagename,
tournament_stage.tournamentFK AS tournament_stagetournamentFK,
tournament.id AS tournamentid,
tournament.name AS tournamentname,
tournament.tournament_templateFK AS tournamenttournament_templateFK,
tournament_template.id AS tournamenttemplateid,
tournament_template.name AS tournament_templatename,
tournament_template.sportFK AS tournament_templatesportFK,
sport.id AS sportid,
sport.name AS sportname
FROM
event INNER JOIN tournament_stage ON event.tournament_stageFK=tournament_stage.id
INNER JOIN tournament ON tournament_stage.tournamentFK=tournament.id 
INNER JOIN tournament_template 
ON tournament.tournament_templateFK=tournament_template.id 
INNER JOIN sport ON tournament_template.sportFK=sport.id
WHERE
DATE(event.startdate) = CURRENT_DATE() 
) a
group by sportname, tournament_templatename, tournament_stagename
order by sportid, tournament_templatename, tournament_stagename";

$result = mysql_query($SQL);

if($result === FALSE) {
die(mysql_error());
}

while($db_field=mysql_fetch_assoc($result)){
echo $db_field['concat1'];
}

mysql_close($db_handle);
}

我要么需要一种方法在连接它们之前回到结果,或者将IdNameDate显示为Id * Name * Date的方法,这样我就可以使用*作为爆炸分隔符。

2 个答案:

答案 0 :(得分:0)

这样的东西?

$group = array();

$fields = array();
$fields['id'] = 2;
$fields['name'] = "test";
$fields['date'] = "2010/02/13";

$group["test"] = $fields;

获取单个字段:

echo $group["test"]["id"];

获得整个群组行:

echo implode(",", $group["test"]); // change "," to any delimiter character

获取所有组合行:

foreach($group as $key => $g)
    echo $key.":".implode(",", $g).";"; // change "," to any delimiter character

希望这会有所帮助......

答案 1 :(得分:0)

我想这样做的唯一方法是:

  1. 分解GROUP_CONCAT结果以获取单个字符串
  2. 使用substr从每个结果中提取Id,Name和Date,因为Id和Date是一致的,它们总是具有相同的字符数
  3. 最后,GROUP_CONCAT弊大于利。