2011-12-30 3 views
0

У меня сложный запрос, который создает конкатенированный результат. Однако, хотя GROUP_CONCAT необходим для других целей, мне все же необходимо иметь возможность использовать куски конкатенированной строки индивидуально.С помощью конкатенированных результатов индивидуально

GROUP_CONCAT(id, name, date AS concat1 

echo $db_field['concat1']; 

... производит этот вывод: IdNameDate, и мне нужно, чтобы быть в состоянии использовать (и эхо) Id, имя и дата отдельно. Я предполагаю, что он должен быть назначен массиву, я начинаю на PHP, и я очень ценю любую помощь.

Для простоты выше я использовал id вместо eventid, name вместо eventname и date вместо 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 * Имя * Дата, так что я могу использовать * как взрываются разделителем.

ответ

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 

Надеется, что это помогает ...

+0

Я не уверен, как назначить переменные этому коду. –

0

Я думаю, единственный способ сделать это состоит в следующем:

  1. Взрываться результаты GROUP_CONCAT, чтобы получить отдельные строки
  2. Использование зиЬзЬг для извлечения Id, имя и дату от каждого результата, как Id и дата последовательны, они всегда имеют одинаковое количество символов

В конце концов, GROUP_CONCAT приносит больше вреда, чем пользы.

Смежные вопросы