我正在尝试获取所有用户,并通过另一个表上的字段对其进行排序,但此字段并不总是存在?
用户 - 持有用户 用户元 - 保存元数据,特别是“权重”,这是我正在尝试订购的。
更具体的解决方案是自动将它们定义为默认重量,但无论如何我可以使它无需工作吗?当前工作查询:
SELECT * FROM users u, usermeta um
WHERE u.ID = um.ID
AND u.name LIKE '%search_terms%';
部分丢失订单,任何/所有帮助都将不胜感激!
答案 0 :(得分:5)
如果表格之间存在关键关系(u.ID = um.ID
)并且您希望列出所有用户,则可以使用weight
usermeta
上的LEFT JOIN
来订购此类用户。
usermeta
可让您保留所有用户,无论他们是否存在于SELECT *, IFNULL(um.weight,9999) as newweight
FROM users u
LEFT JOIN usermeta um on u.ID = um.ID
WHERE u.name LIKE '%search_terms%'
ORDER BY IFNULL(um.weight,9999);
中:
{{1}}
答案 1 :(得分:1)
您可以使用MySQL的IFNULL来定义权重的默认值
请参阅:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull
答案 2 :(得分:1)
SELECT *
FROM users u, usermeta um
WHERE u.ID = um.ID AND
u.name LIKE '%search_terms%'
ORDER BY
CASE WHEN um.weight IS NULL THEN 9999 ELSE um.weight END;
如果缺少weight
,则可以使用case语句对缺少的{{1}}进行替换。