我有这个表request
的列
request_id | users_ids | created
我需要按created
获取结果顺序,但首先获取users_ids
中不存在用户ID的结果。
我使用的是FIELD()
和NOT LIKE
吗?
我该怎么做?
答案 0 :(得分:0)
ORDER BY IF(FIND_IN_SET('111', user_ids)>0,1,0),created
其中'111'是您的用户ID。 但是,正如Marc在评论中指出的那样 - 你应该通过改变你的架构设计来避免这种情况。
答案 1 :(得分:0)
您不应将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
答案 2 :(得分:0)
您还可以尝试将查询拆分为两个查询。
// QUERY 1
SELECT * FROM request WHERE users_ids = '' ORDER BY created
// QUERY 2
SELECT * FROM request WHERE users_ids != '' ORDER BY created