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

use*_*650 3 mysql sql

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

用户 - 持有用户用户元 - 保存元数据,特别是"权重",这是我正在尝试订购的.

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

SELECT * FROM users u, usermeta um 
WHERE u.ID = um.ID 
  AND u.name LIKE '%search_terms%';
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*nie 5

如果你有表(之间的键关系u.ID = um.ID),并要列出所有用户,你可以使用类似这样的命令weightusermeta.

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);
Run Code Online (Sandbox Code Playgroud)