2014-10-28 3 views
0

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

Мой запрос:

SELECT a_games.game_id, COUNT(*) AS cheat_count, a_games.game_fname, a_games.game_logo, a_cheats.cheat_title FROM a_cheats 
       LEFT JOIN a_games ON a_games.game_id=a_cheats.game_id 
       GROUP BY a_cheats.game_id 

это показывает только первый добавленный чита.

Я пробовал использовать max на cheat_id, но значение cheat_title продолжает показывать первый добавленный чит.

Таблица a_cheats

cheat_id type_id member_id game_id cheat_title cheat_body cheat_date  
1  | 1  | 1   | 22  | Truques V...| Introduz...| 2014-10-...| 
2  | 1  | 1   | 25  | Invulnera...| Durante ...| 2014-10-...| 
3  | 1  | 1   | 25  | Modo Debu...| Durante ...| 2014-10-...|  
4  | 1  | 1   | 25  | Charme In...| Durante ...| 2014-10-...| 
5  | 1  | 1   | 36  | Cabeças e...| Começa o...| 2014-10-...| 

Таблица a_games

game_id genre_id member_id game_fname game_sname game_logo 
22  | 15  | 1   | 4x4 Worl...|    | 5259da0... 
25  | 3  | 1   | Akuji th...|    | 5287ae0... 
36  | 25  | 1   | All Star...|    | 5287daa... 

Таким образом, в результатах Akuji бессердечный должен показать cheat_title "Charme Infinito", который является последним добавлен читов для этой игры

результаты запроса

game_id game_count game_fname   game_logo        cheat_title 
22  | 1   | 4x4 World Trophy | 5259da0527128_ava_4x4worldtrophy.jpg | Truques (Vários) 
25  | 3   | Akuji The Heartless | 5287ae093e115_ava_akujiheartless.jpg | Invulnerabilidade 
36  | 1   | All Star Tennis'99 | 5287daa2695ef_ava_allstartennis99.jpg| Cabeças e pés grandes 
+1

вы пробовали 'ORDER BY a_games.game_id, a_cheats.cheat_id DESC'? и, возможно, вам нужно показать вашу схему db. –

+0

Пробовал и не работает. Я также пробовал использовать max() на cheats_id, cheats_date, но только те конкретные поля получают последнюю запись, в то время как cheats_title сохраняет первую запись –

+0

после просмотра вашей схемы, вы можете использовать 'ORDER BY a_games.game_id, a_cheats.cheat_date DESC' –

ответ

0

Кажется, что после того, как вы позвоните count(), вы не можете контролировать, какой из title выбрать позже (он сразу получает название самой ранней записи). Таким образом, мы можем делать то, что вы хотите, вызывая счет позже.

примечание: вы можете изменить ORDER BY a_cheats.cheat_id DESC на номер ORDER BY a_cheats.cheat_date DESC, если хотите более надежно.

SELECT gameID,gameName,cheatTitle, COUNT(gameID) AS cheat_count 
FROM (
    SELECT a_games.game_id as gameID, a_games.game_fname as gameName, a_cheats.cheat_title as cheatTitle 
    FROM a_cheats 
    JOIN a_games ON a_games.game_id=a_cheats.game_id 
    ORDER BY a_cheats.cheat_id DESC 
) ungrouped 
GROUP BY gameID 

SQLFiddle: http://sqlfiddle.com/#!2/63f888/18

ИЛИ

SELECT gameID,gameName,cheatTitle, COUNT(cheatID) AS cheat_count 
FROM (
    SELECT a_games.game_id as gameID, a_games.game_fname as gameName, a_cheats.cheat_title as cheatTitle, a_cheats.cheat_id as cheatID 
    FROM a_cheats 
    RIGHT JOIN a_games ON a_games.game_id=a_cheats.game_id 
    ORDER BY a_cheats.cheat_id DESC 
) ungrouped 
GROUP BY gameID 

SQLFiddle: http://sqlfiddle.com/#!2/63f888/19

+0

спасибо, работал как шарм. t знать о sqlfiddle. инструмент. Еще раз спасибо –

+0

отлично! без проблем –

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