我有这个表request
request_id | users_ids | created
我需要按created
获取结果顺序,但首先获取用户ID在users_ids
中不存在的结果。
我使用类似 FIELD()
和 NOT LIKE
的东西吗?
我该怎么做?
ORDER BY IF(FIND_IN_SET('111', user_ids)>0,1,0),created
其中"111"是您的用户 ID。但是,正如 Marc 在评论中指出的问题 - 您应该通过更改模式设计来避免这种情况。
您也可以尝试将查询分解为两个查询。
// QUERY 1
SELECT * FROM request WHERE users_ids = '' ORDER BY created
// QUERY 2
SELECT * FROM request WHERE users_ids != '' ORDER BY created
您不应该将user_ids
存储在字段中。 您应该有一个单独的关联/联结表。
您可以通过这种方式执行order by
(假设user_ids
以逗号分隔):
order by find_in_set($user_id, user_ids) = 0 desc,
created
编辑:
如果它们是空格分隔的,请执行下列操作之一:
order by find_in_set($user_id, replace(user_ids, ' ', ',')) = 0 desc,
created;
或
order by concat(' ', user_ids, ' ') like concat('% ', $user_id'% '),
created