|
|
|
Использовать условие если оно не вернет пустой результат
|
|||
|---|---|---|---|
|
#18+
Запрос: SELECT `parameters_values`.* FROM `parameters_values` LEFT JOIN `products_parameters` ON (`products_parameters`.`parameters_value_id` = `parameters_values`.`id`) LEFT JOIN `products` ON (`products_parameters`.`product_id` = `products`.`id`) -------------Дальше идут жойны, нужно их проверять, если с жойном таблица `products` не даст результатов то не использовать даный жойн LEFT JOIN products_parameters as pr1 ON (`pr1`.`product_id` = `products`.`id`) LEFT JOIN products_parameters as pr2 ON (`pr2`.`product_id` = `products`.`id`) LEFT JOIN products_parameters as pr3 ON (`pr3`.`product_id` = `products`.`id`) WHERE `parameters_values`.`parameter_id` = '15' AND `products`.`watch` = 1 AND (`pr1`.`parameters_value_id` in (11,10)) AND (`pr2`.`parameters_value_id` in (31,26)) AND (`pr3`.`parameters_value_id` in (15)) GROUP BY `parameters_values`.`id` ORDER BY `parameters_values`.`value` ASC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 22:30:23 |
|
||
|
Использовать условие если оно не вернет пустой результат
|
|||
|---|---|---|---|
|
#18+
kobec -------------Дальше идут жойны, нужно их проверять, если с жойном таблица `products` не даст результатов то не использовать даный жойн вангую: Код: sql 1. 2. 3. 4. 5. 6. а лучше, ТС, задайте вопрос нормально - пример данных / пример результата на этих данных , если словами не получается ... тогда, наверняка, можно будет что-то советовать ... сейчас, даже "не понимая" что вы делаете - видно, что делаете это не правильно: - вот к чему эти LEFT JOIN products_parameters, если из них ничего не выбирается ?? соотв. и это GROUP BY `parameters_values`.`id` - там нафик не нужен ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 02:27:09 |
|
||
|
Использовать условие если оно не вернет пустой результат
|
|||
|---|---|---|---|
|
#18+
Наверно плохо объяснил. Есть структура фильтры-товары: Запрос на фильтрацию товаров - выбрано 4 значения 3-х параметров Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В фильтрах я выводил все параметры и выбирая параметры товары правильно фильтровались, но были случаи когда набор фильтров не находил товаров и пользователь получал сообщение "по вашему запросу ничего не найдено". Стала задача во время филтрации также отсеять фильтра которые не найдут хотя бы один результат. Получилось сделать вариант при котором в фильтрах будут выводиться только те, параметры и их значения, которые есть в уже отфильтрованых товарах: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Этот запрос дает нам отфильтрованый набор параметров который неможет привести в дальнейшем к сообщению "по вашему запросу ничего не найдено". Но отсеялись часть фильтров по выбору которых нашлись бы еще товары. Например фильтр: Тип: -девочка -мальчик -новорожденный Размер: -1 -2 -3 ..... В последнем случаи отсейки фильтров - при выборе Типа "девочка" останутся фильтра Тип -девочка -мальчик -новорожденный Размер -1 -2 -3 Но мальчик и новорожденный должны остаться потому, что они добавят результатов. Нужно оптимизировать последний запрос так чтоб он не отсеивал лишнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 12:59:57 |
|
||
|
Использовать условие если оно не вернет пустой результат
|
|||
|---|---|---|---|
|
#18+
Первейший вопрос - Вы в курсе, что при написании кода надо использовать не только руки, но и голову? А если да - то почему Вы везде, абсолютно везде лепите LEFT JOIN? ну может быть, где-то и правда надо - но ведь в данном случае в принципе не надо! Хотя бы потому, что наличие в секции WHERE ограничений по правой таблице вырождает левое связывание во внутреннее... kobec -------------Дальше идут жойны, нужно их проверять, если с жойном таблица `products` не даст результатов то не использовать даный жойн Импоссибль. Представь вариант - с первым JOIN запрос даст несколько записей, со вторым даст несколько записей, с обоими одновременно - пустой набор. Какой JOIN выбрасывать? И, главное, почему, чем ему такая честь? ведь в запросе они совершщенно равноправны. Если же имеется некий приоритет: добавляем JOIN по одному, если очередной при добавлении приводит к пустому набору - выбрасываем его навсегда и пробуем следующие,- то это решаемо. Но в рамках хранимой процедуры, а не запроса (кстати, возврат сведений о том, что отброшено, тоже задача нетривиальная). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 13:09:34 |
|
||
|
Использовать условие если оно не вернет пустой результат
|
|||
|---|---|---|---|
|
#18+
Akina, еслиб я был такой умный как Вы то наверно не сидел бы на форуме и не задавал "глупые вопросы" или может это форум только для профессионалов? По теме: Каждый жойн отсеивает товары и следующий фильтрует уже отсеяный предыдущим фильтом набор товаров. AkinaЕсли же имеется некий приоритет: добавляем JOIN по одному, если очередной при добавлении приводит к пустому набору - выбрасываем его навсегда и пробуем следующие,- то это решаемо. Но в рамках хранимой процедуры, а не запроса (кстати, возврат сведений о том, что отброшено, тоже задача нетривиальная). Я думаю мне нужна помощь с решением именно этой проблемы. Возможно кто то сталкивался с подобной проблемой и есть другие идеи реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 13:35:57 |
|
||
|
Использовать условие если оно не вернет пустой результат
|
|||
|---|---|---|---|
|
#18+
kobecAkina, еслиб я был такой умный как Вы то наверно не сидел бы на форуме и не задавал "глупые вопросы" или может это форум только для профессионалов? Нет. Но этор и не песочница в детском саду. Предполагается, что всё сделанное - сделано осознанно. Если ты пишешь LEFT - значит, чётко знаешь, почему не INNER, не RIGHT, И без OUTER. Обязан знать. kobecЯ думаю мне нужна помощь с решением именно этой проблемы. Это организационная проблема, а не программная. И создание обоснованного алгоритма должно быть сделано (закончено!) ещё до того, как написан хоть один байт кода. Или получится известное "поди туда не знаю куда..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 14:05:51 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38461159&tid=1835740]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
29ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 278ms |

| 0 / 0 |
