一尘不染

仅按字段排序(如果存在)

sql

我正在尝试获取所有用户,并通过另一个表上的字段对他们进行排序,但是此字段并不总是存在吗?

用户-持有用户用户元-持有元数据,特别是“权重”,这是我要根据其排序的内容。

一个更具体的解决方案是自动为它们定义默认权重,但是无论如何,我可以使它不起作用吗?当前工作查询:

SELECT * FROM users u, usermeta um 
WHERE u.ID = um.ID 
  AND u.name LIKE '%search_terms%';

失去部分订单,任何/所有帮助将不胜感激!


阅读 141

收藏
2021-03-08

共1个答案

一尘不染

如果您在表(u.ID = um.ID)之间具有关键关系,并且想要列出所有用户,则可以使用类似的方法weight对on进行排序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);
2021-03-08