Mysql 仅当字段存在时,按字段排序
我试图获取所有用户,并按另一个表上的字段对其进行排序,但是该字段并不总是存在 用户-容纳用户 用户元-保存元数据,特别是“权重”,这是我试图订购的 一个更具体的解决方案是自动为它们定义一个默认权重,但是我是否可以在没有默认权重的情况下使其工作?当前工作查询:Mysql 仅当字段存在时,按字段排序,mysql,sql,Mysql,Sql,我试图获取所有用户,并按另一个表上的字段对其进行排序,但是该字段并不总是存在 用户-容纳用户 用户元-保存元数据,特别是“权重”,这是我试图订购的 一个更具体的解决方案是自动为它们定义一个默认权重,但是我是否可以在没有默认权重的情况下使其工作?当前工作查询: SELECT*FROM users u,usermeta um 其中u.ID=um.ID 和u.name,如“%search_terms%”; 订单上的部分内容丢失,如有任何/所有帮助,将不胜感激 您可以使用MySQL的IFNULL来定义
SELECT*FROM users u,usermeta um
其中u.ID=um.ID
和u.name,如“%search_terms%”;
订单上的部分内容丢失,如有任何/所有帮助,将不胜感激 您可以使用MySQL的IFNULL来定义权重的默认值 见:
您可以使用case语句对缺少的
权重作出反应,如果它缺少,则用它替换其他内容。如果表之间有键关系(u.ID=um.ID
),并且您希望列出所有用户,您可以使用类似的内容在usermeta
上按weight
排序
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);
您可以这样使用:orderbyifnull(um.weight,0)
如果您的字段是notnull
,但是您想用零代替NULL做同样的事情,您可以用If(um.weight,um.weight,9999)
替换IFNULL(um.weight,9999)
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);