我有这个问题:
SELECT
t1.team_flag AS flag_1,
t2.team_flag AS flag_2,
t1.team_name AS team_name_1,
t2.team_name AS team_name_2,
t1.team_id AS team_id_1,
t2.team_id AS team_id_2,
games.game_id,
games.game_team_1,
games.game_team_2,
games.game_time,
games.game_day,
games.game_location,
games.game_group,
games.game_active,
location_id_to_names.location_id,
location_id_to_names.location_name
FROM games
LEFT JOIN teams t1 ON t1.team_id = game_team_1
LEFT JOIN teams t2 ON t2.team_id = game_team_2
LEFT JOIN location_id_to_names ON games.game_location = location_id_to_names.location_id
ORDER BY games.game_day
返回所有团队名称正确的游戏,但是,我现在只想选择一个具有特定ID的游戏,这不起作用:
SELECT
t1.team_flag AS flag_1,
t2.team_flag AS flag_2,
t1.team_name AS team_name_1,
t2.team_name AS team_name_2,
t1.team_id AS team_id_1,
t2.team_id AS team_id_2,
games.game_id,
games.game_team_1,
games.game_team_2,
games.game_time,
games.game_day,
games.game_location,
games.game_group,
games.game_active,
location_id_to_names.location_id,
location_id_to_names.location_name
FROM games
LEFT JOIN teams t1 ON t1.team_id = game_team_1 AND games.game_id = :game_id
LEFT JOIN teams t2 ON t2.team_id = game_team_2
LEFT JOIN location_id_to_names ON games.game_location = location_id_to_names.location_id
ORDER BY games.game_day
(:game_id)由PDO解析。
这是我得到的结果:
突出显示的行中的ID是正确的,但它不是第一行,我需要将其作为第一行,因为我想将搜索限制为1个结果,所以我不想要一行填充空值。
完成这项工作的最佳方法是什么?
答案 0 :(得分:0)
将games.game_id =:game_id移至WHERE语句
SELECT
t1.team_flag AS flag_1,
t2.team_flag AS flag_2,
t1.team_name AS team_name_1,
t2.team_name AS team_name_2,
t1.team_id AS team_id_1,
t2.team_id AS team_id_2,
games.game_id,
games.game_team_1,
games.game_team_2,
games.game_time,
games.game_day,
games.game_location,
games.game_group,
games.game_active,
location_id_to_names.location_id,
location_id_to_names.location_name
FROM games
LEFT JOIN teams t1 ON t1.team_id = game_team_1
LEFT JOIN teams t2 ON t2.team_id = game_team_2
LEFT JOIN location_id_to_names ON games.game_location = location_id_to_names.location_id
WHERE
games.game_id = :game_id
ORDER BY games.game_day
答案 1 :(得分:0)
从您的加入中移除LEFT
并留下一个简单的JOIN
:
SELECT
t1.team_flag AS flag_1,
t2.team_flag AS flag_2,
t1.team_name AS team_name_1,
t2.team_name AS team_name_2,
t1.team_id AS team_id_1,
t2.team_id AS team_id_2,
games.game_id,
games.game_team_1,
games.game_team_2,
games.game_time,
games.game_day,
games.game_location,
games.game_group,
games.game_active,
location_id_to_names.location_id,
location_id_to_names.location_name
FROM games
LEFT JOIN teams t1 ON t1.team_id = game_team_1 AND games.game_id = :game_id
LEFT JOIN teams t2 ON t2.team_id = game_team_2
LEFT JOIN location_id_to_names ON games.game_location = location_id_to_names.location_id
ORDER BY games.game_day
LEFT
部分负责将您想要的行加入到同一团队的所有其他行中。