2014-02-18 4 views
0

У меня есть эта таблица request с колоннамиЗАКАЗА результатов MySQL BY даты, а также с помощью LIKE

request_id | users_ids | created 

Мне нужно, чтобы получить заказ результатов по created, но получить первый те, где идентификатор пользователя не существует внутри users_ids.

Использую ли я что-то вроде FIELD() и NOT LIKE?

Как это сделать?

+2

'users_ids' содержит значения' a, b, c, d, ...., z', разделенные запятой? Если да, то правильный ответ заключается в том, что вы этого не делаете - вы помещаете их в свой отдельный ребенок в нормальном нормализованном дизайне, а затем ваш вопрос в основном уходит. –

+0

Вам нужно предоставить нам больше информации. Что вы подразумеваете под «не существует внутри» sers_ids? –

+0

«users_ids» содержит идентификаторы типа «po27 po34 po55», разделенные пробелами, и нет порядка. Мне нужен порядок результатов «created», но если пользователь «po33» не находится в «user_ids», тогда мне нужен этот результат. @MarcB – Pedro

ответ

0
ORDER BY IF(FIND_IN_SET('111', user_ids)>0,1,0),created 

Где '111' - ваш идентификатор пользователя. Но, как указал Марк в комментарии к вашему вопросу, вы должны избегать этого, изменив схему схемы.

0

Вы не должны хранить user_ids в поле. У вас должна быть отдельная таблица соединения/соединения.

Вы можете сделать order by таким образом (в предположении, что user_ids будет через запятую):

order by find_in_set($user_id, user_ids) = 0 desc, 
     created 

Edit:

Если они разделены пространством, выполните одно из следующих действий:

order by find_in_set($user_id, replace(user_ids, ' ', ',')) = 0 desc, 
     created; 

или

order by concat(' ', user_ids, ' ') like concat('% ', $user_id'% '), 
     created 
+0

* «Предполагая, что user_ids разделен запятой» * - Нет, ['Сюжет загустеет'] (http://stackoverflow.com/questions/21861775/order-mysql-results-by-date-and-also-using- например, # comment33096552_21861775) –

+0

users_ids не запятая, которая разделена пробелами, есть ли альтернатива? Спасибо. – Pedro

0

Вы также можете попробовать разбить запрос на два запроса.

// QUERY 1 
SELECT * FROM request WHERE users_ids = '' ORDER BY created 

// QUERY 2 
SELECT * FROM request WHERE users_ids != '' ORDER BY created 
Смежные вопросы