SQL LIMIT не возвращает результатов, при которых LIMIT не возвращает результаты
SELECT * FROM mm_tfs
WHERE product_slug LIKE '%football%'
AND schoolid = '8' AND category_id ='21'
LIMIT 4
Возвращает 4 значения, как я спрашиваю, но следующий оператор возвращает 0 - существует ли правило об использовании оператора OR, с которым я не знаком? Мое предположение состоит в том, что оно должно возвращать все значения в 1 (или больше, если бы не предел).
SELECT * FROM mm_tfs
WHERE (product_slug LIKE '%football%'
AND schoolid = '8' AND category_id ='21')
OR (product_description LIKE '%football%'
AND schoolid = '8' AND category_id ='21')
LIMIT 4
ПРИМЕЧАНИЕ by cyberkiwi Первая часть OR Q2 точно такая же, как предложение WHERE в Q1
product_description LIKE '%football%' AND schoolid = '8' AND category_id ='21
Без инструкции OR сама по себе делает желаемый результат, если у него нет предела. Когда инструкция OR используется вместе с LIMIT, возвращается 0 значений.
SELECT * FROM mm_tfs
WHERE product_description LIKE '%football%'
AND schoolid = '8' AND category_id ='21'
LIMIT 4
^ - Это дает 0 результатов
SELECT * FROM mm_tfs
WHERE product_description LIKE '%football%'
AND schoolid = '8' AND category_id ='21'
^ - Это дает результаты
Самая странная часть этого заключается в том, что все эти запросы обрабатывают правильный эффект в моем окне запросов PHPMYADMIN SQL, но не в самом приложении.
Ответы
Ответ 1
Вы повторяете некоторые из условий, которые не нужны. Вместо этого попробуйте:
SELECT * FROM mm_tfs
WHERE
(product_slug LIKE '%football%'
OR product_description LIKE '%football%')
AND schoolid = '8'
AND category_id ='21'
LIMIT 4
UPDATE:
Я создал следующую таблицу:
create table mm_tfs2 (schoolid varchar(2), categoryid varchar(2),
description varchar(20), slug varchar(20));
И 5 раз:
insert into mm_tfs2 values (8, 21, '', 'football');
И, наконец, запрос:
select * from mm_tfs2 where
(slug like '%football%' and schoolid = 8 and categoryid = 21)
or (description like '%football%' and schoolid = 8 and categoryid = 21)
limit 4;
+----------+------------+-------------+----------+
| schoolid | categoryid | description | slug |
+----------+------------+-------------+----------+
| 8 | 21 | | football |
| 8 | 21 | | football |
| 8 | 21 | | football |
| 8 | 21 | | football |
+----------+------------+-------------+----------+
4 rows in set (0.00 sec)
Поэтому мне жаль говорить, что я не могу воссоздать проблему.
Ответ 2
Попробуйте поставить() arround на все условие
( (...AND...) OR (...AND...) )
Так же:
SELECT * FROM mm_tfs WHERE
( (product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='21')
OR (product_description LIKE '%football%' AND schoolid = '8' AND category_id
='21')
) LIMIT 4
Ответ 3
Я думаю, что вы можете немного почистить его, вы получаете только строки для одной школы и один идентификатор категории, поэтому нет причин, по которым вам нужно будет проверять эти оба раза:
SELECT *
FROM mm_tfs
WHERE schoolid = '8'
AND category_id ='21'
AND (product_slug LIKE '%football%'
OR product_description LIKE '%football%')
LIMIT 4;