2015-06-01 3 views
0

Вот мой запрос:Sub запроса о состоянии

SELECT a.product_title, b.product_title FROM products a, products b 
WHERE b.color_id = a.color_id 
AND b.price_id = a.price_id 
AND b.size_id = a.size_id 
AND a.id = 1 
AND ??? (SELECT * FROM products LIMIT ???); 

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

Также возможно установить, что LIMIT является тем, что требуется, т.е. первый запрос получает 6 строк, тогда мне нужно, чтобы ограничение было 4 - составляло 10 всех вместе.

+0

Я думаю, что вы можете что-то сделать, если найдете что-то, что позволяет отличать ответ от первого и второго запросов с этим: SELECT a.product_title, b.product_title FROM products a, products b WHERE b.color_id = a. color_id И b.price_id = a.price_id И b.size_id = a.size_id И a.id = 1 ИЛИ a.id = 1 И b.id in (SELECT * FROM products) GROUP BY ???? LIMIT 10; – ekans

ответ

0

я действительно не понимаю ваш вопрос хорошо,

в любом случае вы можете использовать переменные ,

Пример:

Set ACount = (select count(a.id) from products a where ...=...); 
SELECT a.product_title, b.product_title FROM products a, products b 
WHERE b.color_id = a.color_id 
AND b.price_id = a.price_id 
AND b.size_id = a.size_id 
AND a.id = 1 
AND if(@ACount<10, "Your where statement here",0); 
+0

Собственные DDL-файлы, набор данных, результирующий набор очень прояснили бы эту проблему (и все проблемы) – Strawberry

0

Вы можете сделать это с помощью "UNION".

Если вы не заботитесь о производительности и просто хотите сохранить один запрос, вы всегда можете UNION второй запрос и получить первые 10 строк из комбинированного результата:

SELECT * FROM (
SELECT a.product_title, b.product_title , 0 as Rank 
FROM products a, products b 
WHERE b.color_id = a.color_id 
AND b.price_id = a.price_id 
AND b.size_id = a.size_id 
AND a.id = 1 
LIMIT 10 
UNION 
SELECT product_title, '', Rank 
FROM products 
WHERE (your condition) 
LIMIT 20 
) E 
ORDER BY Rank 
LIMIT 10 

С дополнительными результатами второй запрос будет иметь более высокий ранг, если у вас уже есть 10 записей в первом запросе, их ограничение будет ограничено.

Поскольку Союз будет удалить дубликаты, так что вам нужно добавить достаточное количество результатов, чтобы убедиться, что вы получите по крайней мере 10.

Приведенный выше код, чтобы показать вам концепцию, и вам нужно настроить его в соответствии с вашими потребностями.

+0

спасибо, сколько запросов на выбор? Было бы лучше работать с одним запросом, а затем в php проверить счетчик, если менее 10, выполнить другой запрос? – panthro

+0

Зависит от того, как часто вам нужен второй запрос и как быстро выполняется второй запрос. Такие запросы обычно выполняются для создания представления или функции, поэтому передним интерфейсом (php) не нужно беспокоиться об этой вещи. – Tim3880

+0

Итак, сколько запросов - ваш запрос? – panthro

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