shop_product_profile WHERE shop_options_attribut_id IN(1,11,2)GROUPBY shop_product_id
А нужно чтобы получить только shop_product_id 54 поскольку в нем только есть shop_options_attribut_id IN (1,11,2) Прикреплено изображение (Нажмите для увеличения)
EuGen
Отправлено: 11 Декабря, 2012 - 13:51:39
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
На самом деле все печально - нужен тройной JOIN в терминах реляционного запроса. Что хуже - если значений будет больше трех, то и число JOIN возрастет соответственно.
Существует возможность "схитрить". Но решение это - плохое, потому как зависит от СУБД и потому как использует обработку строк. Корректнее будет построить архитектуру так, чтобы избавиться от необходимости в описанном поиске.
Собственно, "плохое" решение:
- разумеется, в скрипте обязательно подставлять в LOCATE отсортированный массив значений, склеенный через запятую.
При этом не требуется ни уникальность значений, ни наличие тех и только тех id, что требуется найти (подпоследовательности тоже найдутся)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 11 Декабря, 2012 - 14:18:02
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Если атрибуты для продукта уникальны, и нужны только удовлетворяющие всем, можно подсчитать count и отсеить неподходящие варианты.
shop_product_profile WHERE shop_options_attribut_id IN(1,11,10)GROUPBY shop_product_id
HAVING count(0)=3
по идеи нужно еще сделать группировку и по count_for_page, но так не получается.
Что в результате получаю три строки в count_for_page.
А пытаюсь получить одну строку где в результате количество найденных товаров.
EuGen
Может что посоветует по поводу структуры БД.
Делал для того чтобы можно было осуществлять поиск по всевозможным shop_options.
К примеру shop_category - стационарный компьютер shop_options - размер жесткого диска
-shop_options_attribut - 250 ГБ
-shop_options_attribut - 300 ГБ
-shop_options_attribut - 500 ГБ Прикреплено изображение (Нажмите для увеличения)
EuGen
Отправлено: 12 Декабря, 2012 - 12:17:21
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Если данных достаточно много, то запрос, что я приводил выше, Вам не подойдет совсем.
Запрос с использованием COUNT же имеет ограничение - он может находить лишь точные совпадения (то есть подмножества в результат не попадут). Если устраивает - то вполне.
По поводу структуры - нужно проектировать, исходя из бизнес-логики, и, разумеется, в это входит то, какие запросы будут требоваться. Как я уже говорил, запроса с поиском множественных значений лучше избегать (в большинстве случаев решается введением таблиц(ы) связок).
Однако в Вашем случае, как я понимаю, структура уже есть и приложение построено - потому говорить о рефакторинге не приходится.
shop_product_profile WHERE shop_options_attribut_id IN(1,11,10)GROUPBY shop_product_id
HAVING count_for_page=3
- насколько я понимаю.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
kappa
Отправлено: 12 Декабря, 2012 - 13:13:24
Посетитель
Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011
Помог: 3 раз(а)
EuGen
Учту в следующий раз перед проектированием.
Что то не то с COUNT, возвращает одну строку (как и надо) count_for_page но с результатом NULL.
EuGen
Отправлено: 12 Декабря, 2012 - 13:17:57
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
kappa пишет:
но с результатом NULL.
Результатом чего?
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
kappa
Отправлено: 12 Декабря, 2012 - 13:45:16
Посетитель
Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011
Помог: 3 раз(а)
EuGen пишет:
Результатом чего?
Я использую Framework и для пагинатора необходимо указать количество записей.
А результат пытаюсь получить: Количество записей которые совпадают с условием про что писал Мелкий.
EuGen
Отправлено: 12 Декабря, 2012 - 13:58:03
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
В SQL результат корректен? (консоль/pma и т.п.)
Ну и еще, думаю, что
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.