我正在尝试提出一个查询,其中第三个表将连接另外两个表。问题是第一个表有不同的版本,我需要查询查看表 1 中的列,然后选择要连接的正确表,但结果查询必须返回表 1 中的所有行,只需将额外的表 3 连接到满足 WHERe 子句的特定行。 这可能吗?
示例:
表 1 = 用户
表 2 = 横幅
表 3 = UserSettings 或 AdminSettings 或无
查询会说...
WHERE User.rank='admin' LEFT JOIN AdminSettings
WHERE User.rank='user' LEFT JOIN UserSettings
我当前的查询是这样的:
$query = "SELECT * FROM Users as U WHERE U.user_id = :id ";
$query .= "LEFT JOIN Banners as B ON U.banner_id = B.banner_id ";
$query .= "LEFT JOIN AdminSettings ON U.server_id = AdminSettings.user_id WHERE U.rank='Admin' ";
$query .= "LIMIT 1";
问题是它只显示 User.rank='admin' 的行,而不显示 User.rank='user' 其余的行。
最佳答案
连接table3
两次并在select语句中使用CASE
SELECT a.*,
b.*
CASE WHEN a.rank = 'admin'
THEN c.user_ID -- gets value from AdminSettings
ELSE d.user_ID -- gets value from UserSettings
END as ColName1,
CASE WHEN a.rank = 'admin'
THEN c.colName -- gets value from AdminSettings
ELSE d.colName -- gets value from UserSettings
END as ColName2
FROM users a
INNER JOIN banners b
ON a.banner_id = b.banner_id
LEFT JOIN AdminSettings c
ON a.server_ID = c.user_ID
LEFT JOIN UserSettings d
ON a.server_ID = d.user_ID
关于php - 根据第一个表的内容连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169810/