Использование составных результатов индивидуально - PullRequest
0 голосов
/ 31 декабря 2011

Я получил сложный запрос, который дает объединенный результат. Тем не менее, хотя GROUP_CONCAT необходимо для других целей, мне все же нужно иметь возможность использовать части объединенной строки по отдельности.

GROUP_CONCAT(id, name, date AS concat1

echo $db_field['concat1'];

... выдает такой вывод: IdNameDate, и мне нужно иметь возможность использовать (и выводить) Id, Name и Date отдельно. Я думаю, это должно быть присвоено массиву, я новичок в 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 * Имя * Дата, чтобы я мог использовать * в качестве разделителя разнесения.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2011

Полагаю, единственный способ сделать это:

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

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

0 голосов
/ 31 декабря 2011

Как то так?

$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

Надеюсь, это поможет ...

...