2013-12-05 3 views
-1

У меня есть этот запрос в моей базе данных MySQLMySQL проходит многократный WHERE условие

SELECT * FROM tabelXYZ 
WHERE ((itemX BETWEEN 240 AND 300) 
     AND (ItemY BETWEEN 180 AND 200) 
      AND (ItemZ BETWEEN 70 AND 130)) 
GROUP BY ItemX ASC 
LIMIT 50 

и у меня есть это 9 результаты:

240 - 195 - 130 
250 - 195 - 130 
255 - 185 - 90 
260 - 195 - 130 
265 - 200 - 125 
270 - 195 - 130 
280 - 195 - 130 
290 - 185 - 100 
300 - 195 - 130 

моя проблема, я смотрю на этот пункт

240 - 180 - 70 

Я могу найти этот результат только в том случае, если этот запрос нужен (малый диапазон для itemY, 190 вместо 200)

SELECT * FROM tabelXYZ 
WHERE ((itemX BETWEEN 240 AND 300) 
     AND (ItemY BETWEEN 180 AND 190) 
      AND (ItemZ BETWEEN 70 AND 130)) 
GROUP BY ItemX ASC 
LIMIT 50 

после этого запроса я Получать этот результат:

240 - 180 - 70 
250 - 180 - 70 
255 - 185 - 90 
260 - 180 - 70 
270 - 180 - 70 
280 - 180 - 70 
290 - 185 - 100 
300 - 180 - 70 
240 - 180 - 70 

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

Я думаю, возникает ошибка, потому что ИНЕКЕ

+4

Почему вы делаете 'GROUP BY ItemX ASC'? Это «скрывает» некоторые строки, группируя их по строкам с тем же «ItemX». –

+2

Мне непонятно, каков ваш ожидаемый результат. –

+0

Другими словами, каков ваш ожидаемый результат? Мы можем объяснить результаты, но мы не сможем предоставить решение, пока вы не покажете нам, что вы пытаетесь сделать. Я проголосую, пока вы не улучшите свой вопрос. –

ответ

1

GROUP BY ItemX ASC означает, что он будет только RETU rn одна строка на значение ItemX. Это может быть или не быть строкой, которая соответствует 240 - 180 - 70.

+0

Фактически, это будет первая строка, которую она найдет для каждой группы, и если она не использует уникальный индекс, первая найденная строка будет произвольной. –

+0

это была проблема, с ORDER BY itemX ASC, itemY, itemZ, покажет все результаты – Cosmin

0

Если вы GROUP BY ItemX и скажете, что у нас есть два элемента, где itemX = 240 предложение группы будет выбирать только одно из значений, а не то, и другое.

+0

спасибо, это была проблема – Cosmin

0

Вы пропустили синтаксис, это довольно распространенная ошибка, поэтому не беспокойтесь.

Вы хотите, этот запрос:

SELECT * FROM tabelXYZ 
WHERE ((itemX BETWEEN 240 AND 300) 
    AND (ItemY BETWEEN 180 AND 200) 
     AND (ItemZ BETWEEN 70 AND 130)) 
ORDER BY ItemX ASC 
LIMIT 50 

Обратите внимание, что я заменил GROUP BY с ORDER BY. Это все, что вам нужно знать, но вам нужно помнить, что GROUP BY делает что-то совершенно иное, чем группирование.

+0

спасибо, это была проблема - я делаю этот запрос "ORDER BY lungime ASC, latime, inaltime « – Cosmin

0

Как уже было сказано, удалите группу, а также ваш лимит, и вы должны увидеть, что вы ищете. Они ограничивают и сужают, соответственно, ваш результат до такой степени, что вы не увидите желаемого результата.

+0

благодарим вас за ваше время – Cosmin

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