Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как грамотно сделать выборку для сортировки / 8 сообщений из 8, страница 1 из 1
26.02.2016, 10:15
    #39179548
pogran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
У меня в базе есть таблица с атрибутами http://prntscr.com/a82k5v где entityId Это id продукта. Так вот по результатам данной таблицы нужно и сделать выборку продуктов(таблица product). К примеру у меня приходит массив на сортировку вида
$params(attributeId, optionId)
$params = [
80 => 360,
82 => 362,
];

В итоге должно получится два продукта в id 22 и 24. Т.е смысл в том что все атрибуты в массиве params должны присутствовать у товара. Как это сделать все одним запросом?
...
Рейтинг: 0 / 0
26.02.2016, 10:25
    #39179556
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
...
Рейтинг: 0 / 0
26.02.2016, 12:29
    #39179704
pogran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
Alex_Ustinovсм HAVING+GROUP BY Помогите составить запрос

честно не особо понял как это сделать, не могли бы Вы детальней написать как это реализовать
...
Рейтинг: 0 / 0
26.02.2016, 12:38
    #39179717
pogran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
хотя если не ошибаюсь получилось :)
Код: sql
1.
2.
3.
4.
5.
6.
select * from product
where `id` in (SELECT `entityId` 
                    FROM `eav_attribute_value` 
                    WHERE `attributeId` = 80 and `optionId` = 360 or `attributeId` = 81 and `optionId` = 362
                    Group By `entityId`
                    haVing count(`entityId`) >=2)
...
Рейтинг: 0 / 0
26.02.2016, 12:48
    #39179728
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
pogran,

Если версия MySQL ниже, чем 5.7, то перепишите IN (SELECT ...) на JOIN, а то очень медленно будет работать.
...
Рейтинг: 0 / 0
26.02.2016, 13:55
    #39179816
pogran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
ага спасибо за подсказку. что-то я проверил запрос неверно работает( . выборку не так выдаёт. к примеру есть данные
id|entityId|attributeId|optionId

1|10|80|360
2|10|81|361
3|11|81|361
4|12|80|360

Выборку надо сделать по данным attributeId = 80 и optionId = 360 , attributeId = 81 и optionId = 361. Должен получится один entityId = 10. У меня сейчас получаются левые данные(
...
Рейтинг: 0 / 0
26.02.2016, 14:03
    #39179828
pogran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
хотя вручную прописал вот такой запрос
SELECT `entityId`
FROM `eav_attribute_value`
WHERE `attributeId` = 80 and `optionId` = 360 or `attributeId` = 81 and `optionId` = 362 or `attributeId` = 82 and `optionId` = 364
Group By `entityId`
haVing count(`entityId`) >=3

и выдало только один результат.видимо фреймворк где-то скобки расставляет не так
...
Рейтинг: 0 / 0
26.02.2016, 15:11
    #39179917
pogran
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно сделать выборку для сортировки
Для вот такой бд выборка не верно работает http://prntscr.com/a859wq по такому вот запросу

SELECT `eav_attribute_value`.`entityId` FROM `eav_attribute_value` WHERE eav_attribute_value.attributeId =80 and eav_attribute_value.optionId IN (358,359,360) or eav_attribute_value.attributeId =82 and eav_attribute_value.optionId IN (364) GROUP BY `entityId` HAVING count(entityId) >= 2

Проблема в том что выдаёт две строки 22 и 23,а надо чтобы просто 22 была. Все дело в том что по этой записи eav_attribute_value.attributeId =80 and eav_attribute_value.optionId IN (358,359,360) для 22 строки по группировке находит 2 значения, а надо чтобы максимум одно бралось. Как это сделать?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как грамотно сделать выборку для сортировки / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]