Отображать категории в результатах запроса - PullRequest
0 голосов
/ 29 декабря 2011

Я объединил несколько таблиц с помощью INNER JOIN и получил вывод, похожий на этот:

SPORT COUNTRY LEAGUE MATCH
SPORT COUNTRY LEAGUE MATCH
SPORT COUNTRY LEAGUE MATCH

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

SPORT
COUNTRY
LEAGUE1
MATCH
MATCH
MATCH
LEAGUE2
MATCH
MATCH
MATCH

Код:

if ($db_found) {

$SQL ="
select sportname, 
  tournament_templatename, 
  tournament_stagename,    
  GROUP_CONCAT(eventname) as event_name
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() 
       ORDER BY
         sport.id ASC, tournament_template.name ASC, event.startdate ASC'
     )
GROUP BY 
  sportname, tournament_templatename, tournament_stagename
ORDER BY 
  sportname, tournament_templatename, tournament_stagename";
$result = mysql_query($SQL);

echo "<table border='1' style='border-collapse: collapse;border-color: white;
font-size:8px; background-color: #c8ccce; width:100%;'>";

while($db_field=mysql_fetch_assoc($result)){
echo  "<tr>" , "<td>" , $db_field['sportname'] , "</td> " , "<td>" ,
$db_field['tournament_templatename'] , "</td>" , "<td>" , 
$db_field['tournament_stagename'] , "</td>" , "<td>" , $db_field['eventstartdate'] ,
"</td>" , "<td>" , $db_field['eventname'] , "</td>" , "</tr>";
}
echo "</table>";
mysql_close($db_handle);
}

Спасибо за помощь новичку в PHP.

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

По вашему запросу вы можете:

$SQL ="
select sportname, 
   tournament_templatename, 
   tournament_stagename,    
   GROUP_CONCAT(eventname) as eventname
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 sportname, tournament_templatename, tournament_stagename";

и затем извлечь результаты, причем первые 3 столбца уже уникальны.

php-код остается прежним:

$result = mysql_query($SQL);

while($db_field=mysql_fetch_assoc($result)){
echo $db_field['sportname'] , " " , $db_field['tournament_templatename'] , " " ,      
$db_field['tournament_stagename']  ,  " " , $db_field['eventname'];
echo "<br>";
}
0 голосов
/ 29 декабря 2011

Тогда вам нужно посчитать результаты. Просто считайте каждый раз, когда вы выводите результаты, и если результат хочет сделать это более 1 раза, просто верните ноль.

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

SQL не поддерживает этот тип прорыва.Вы должны проанализировать все данные и выполнить свой собственный анализ заголовка / детализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...