SQL-запрос для отображения нескольких записей из одной таблицы? - PullRequest
0 голосов
/ 29 ноября 2011

Я создаю базу данных для небольшой фирмы по набору спортивных кадров для начинающих колледжей. По сути, я пытаюсь собрать статистику старшеклассников за два года на уровне университета и, если возможно, вывести их в один ряд. (Я знаю, это звучит грязно, но ради коммерческого веб-издателя, которого мы используем, мне проще его создать.) Пример структуры таблицы можно увидеть ниже:

Player ID, YearId, Points
10, 2010, 120
11, 2010, 90
10, 2011, 160
11, 2011, 173

Желаемые результаты:

10, 2010, 120, 2011, 160

11, 2010, 90, 2011, 173

Я новичок в MySQL, поэтому любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011

Это даст вам скользящие предыдущие два года, используя текущий год и предыдущий автоматически с момента запуска запроса:

SELECT p.PlayerId, p.YearId AS PreviousYear, p.Points AS PreviousPoints
   , p2.YearId AS CurrentYear, p2.Points AS CurrentPoints
FROM Player AS p
LEFT JOIN Player AS p2 ON p.PlayerId = p2.PlayerId
   AND p.YearId = p2.YearId - 1
WHERE p2.YearId = YEAR(NOW())
1 голос
/ 29 ноября 2011
select
playerid,group_concat(concat_ws(',',yearid,points) order by yearid) as merged
from table
where yearid >= year(curdate() - interval 1 year)
group by playerid
0 голосов
/ 29 ноября 2011

Если вы ищете всего два года, вы можете присоединиться:

SELECT t1.playerid,t1.yearid,t1.points,t2.yearid.t2.points 
FROM table t1 
LEFT JOIN table t2 
ON t1.playerid = t2.playerid 
WHERE t1.yearid = 2010 AND t2.yearid = 2011;

Если вам нужен более гибкий способ, вы всегда можете использовать подзапросы, но я думаю, что вы придете к тому моменту, когда вы захотите провести такую ​​реструктуризацию на стороне сценария, а не в базе данных. Реляционные базы данных просто плохо работают с такими неструктурированными данными.

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