[英]Ordering by a field, only if it exists
我正在尝试获取所有用户,并通过另一个表上的字段对它们进行排序,但是这个字段并不总是存在?
用户 - 持有用户用户元 - 保存元数据,特别是“权重”,这是我正在尝试订购的。
一个更具体的解决方案是自动将它们定义为默认权重,但无论如何我可以使它无需工作吗? 当前工作查询:
SELECT * FROM users u, usermeta um
WHERE u.ID = um.ID
AND u.name LIKE '%search_terms%';
部分订单丢失,任何/所有帮助将不胜感激!
如果表之间存在关键关系( u.ID = um.ID
)并且您想要列出所有用户,则可以使用类似的内容按usermeta
的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);
您可以使用MySQL的IFNULL来定义权重的默认值
请参阅: http : //dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull
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
作出反应,如果它缺失则将其替换为其他东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.