2016-03-16 6 views
1

Я пытаюсь получить значение MIN() и MAX() из запроса, чтобы я мог использовать полученные значения в функции PHP, но, похоже, не работает как это сделать, потому что есть ЛИМИТ.MySQL MIN() и MAX() с LIMIT

SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID 
FROM parts_listing 
WHERE BaseGroup = 0 
LIMIT 0,50; 

Это динамически генерируемый ПРЕДЕЛ используется функцией постраничной поэтому в данном примере, должны дать MinID = 1 и MAXID = 50, но вместо этого дает MinID = 1 и MinID = 129, которое является числом от общего числа записи в BaseGroup 0. Если я использую любые другие значения BaseGroup, он также дает общие значения. Если изменить стартовую запись LIMIT на, например, LIMIT 10,50, я ничего не получаю.

Я понял, что здесь есть похожие вопросы, но они не помогли в этом конкретном случае. Есть идеи?

+0

Я думаю, что проблема, если вы находитесь в среде PHP, имеет порядок чисел; вы можете использовать LIMIT 0 OFFSET 50 или короткий синтаксис LIMIT 50,0 (цифры в этом должны быть возвращены) – Jessica

ответ

2

LIMIT не ограничивает использование записей mysql для вычисления MIN или MAX функций. ВСЕ ЗАПИСИ, который соответствует КУДА критерии, используемые для расчета результаты

Другими словами LIMIT не имеет никакого смысла с агрегатными функциями

LIMIT не видит запрос, просто увидеть набор результатов, если выходы запроса более чем один ряд, пределы работает с этим

Вы должны использовать WHERE clausule, «ограничить» строка, используемая в агрегатных функциях

2

LIMIT применяется после обработки в MIN/MAX, когда есть только единственная строка слева.

Вы должны переместить его в Derived таблице:

SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID 
FROM 
(
    SELECT ID 
    FROM parts_listing 
    WHERE BaseGroup = 0 
    LIMIT 0,50 
) as dt 

И вы, вероятно, потребуется ORDER BY тоже.

+0

Спасибо! Я думал, что я пробовал все возможные способы сделать это и даже попытался получить производную таблицу, но не получил результата, но, увидев ваш пример, я использовал WHERE ID IN, а не как FROM. Делает смысл и работает! (Да, у фактического запроса есть ORDER BY.) – DonP

+0

В качестве продолжения все работает сейчас и, вероятно, достаточно хорошо для моих нужд, но это дает нечетные результаты. Например, с ORDER BY GroupNumber и LIMIT 10,50 он дает MinID = 9 и MaxID = 61, что составляет 52 записи, и без ORDER BY он дает MinID = 11 и MaxID = 60, что составляет 49 записей. Без ORDER BY и LIMIT 0,50 он дает MinID = 1 и MaxID = 61, как и должно, что составляет 50 записей. – DonP

+0

@DonP: Является ли GroupNumber уникальным? Без ORDER BY он основан на физическом порядке внутри таблицы, в настоящее время работает корректно, но нет гарантии, что он будет работать так же, когда ara обновляет/удаляет ... – dnoeth