繁体   English   中英

按字段排序,仅在存在时才排序

[英]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 )并且您想要列出所有用户,则可以使用类似的内容按usermetaweight 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM