Есть ли обходной путь для использования LIMIT в подзапросе в MySQL? - PullRequest
7 голосов
/ 21 октября 2010

Вот мой оригинальный запрос ...

SELECT `id`
  FROM `properties`
 LIMIT 10, 20

Условие LIMIT предназначено для нумерации страниц.

Теперь я должен получить все как раньше, но мне нужно получить только треть строк, где присутствует условие.

Я придумал это, просто добавив LIMIT 30, прежде чем я понял, как это сделать (всего совпадений строк / 3) * 2.

SELECT `id`
  FROM `properties`
 WHERE `id` NOT IN (SELECT `id` 
                      FROM `properties` 
                     WHERE `vendor` = "abc" 
                  ORDER BY RAND() 
                     LIMIT 30)
LIMIT 10, 20    

MySQL сказал ...

1235 - Эта версия MySQL еще не поддерживает подзапрос LIMIT & IN / ALL / ANY / SOME '

Я думаю, я не могу использовать LIMIT в подзапросе.

Так что это много вопросов, но все связанные ...

  • Есть ли обходной путь для LIMIT в подзапросе?
  • Могу ли я выбрать 1/3 совпадающих строк с MySQL?
  • Нужно ли превратить это в 2 запроса или просто выбрать все и сбросить строки, которые не требуются в PHP?

Ответы [ 3 ]

15 голосов
/ 21 октября 2010

Извините, я опоздал, у меня это сработало:

   SELECT p.id 
     FROM properties p
LEFT JOIN (SELECT t.id
             FROM PROPERTIES t
            WHERE t.vendor = 'abc'
         ORDER BY RAND()
            LIMIT 30) x ON x.id = p.id
    WHERE x.id IS NULL
    LIMIT 10, 20
4 голосов
/ 21 октября 2010

Если ваша версия MySQL не поддерживает это, у вас есть 2 варианта:

  • Обновление. Всегда весело, и, как правило, лучше быть на последней версии.
  • Вырвите свой подзапрос, используя php. Захватите идентификаторы, затем отформатируйте результаты в строку через запятую.
1 голос
/ 21 октября 2010

MySQL поддерживает LIMIT в подзапросе ... но MySQL НЕ поддерживает использование IN / NOT IN с подзапросом.

Если честно, я действительно не знаю, что вы пытаетесь выполнить.

...