Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅当字段存在时,按字段排序_Mysql_Sql - Fatal编程技术网

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);