2015-10-31 2 views

ответ

0

Вот один метод:

(SELECT * FROM table ORDER BY id DESC LIMIT 4, 1) 
UNION ALL 
(SELECT * FROM table ORDER BY id DESC LIMIT 6, 1) 

Если у вас нет индекса на id (и даже в некоторых случаях, когда вы делаете), более эффективный метод будет использовать переменные:

SELECT t.* 
FROM (SELECT t.*, (@rn := @rn + 1) as rn 
     FROM table CROSS JOIN (SELECT @rn := 0) params 
     ORDER BY id DESC 
    ) t 
WHERE rn IN (5, 7); 

Это только сортирует данные один раз.

+0

ОК, первый работает, второй не делает. это дает ошибку. Я ищу что-то вроде «WHERE row_number (определенный порядок) IN (5, 7, 18, 19, 20)». сначала в порядке, но он становится длинным запросом, когда я увеличиваю число. – junior7256

+1

@ junior7256. , , Оба метода требуют индекса на 'id'. Однако, если у вас большой стол, ни одна из них не будет иметь впечатляющую производительность при больших смещениях. –

+0

Я хочу выбрать 5 строк, таких как 5, 7, 18, 25, 30. Я не могу написать «id in (5, 7, 18, 25, 30)», потому что эти идентификаторы могут отсутствовать. поэтому мне нужно выбрать на основе номера строки определенного порядка. я могу использовать ваш первый метод, тогда я должен сделать это 5 раз и использовать «UNION ALL» 4 раза. Мне просто нужен альтернативный запрос, который даст мне тот же результат. – junior7256

Смежные вопросы