|
|
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
У меня в базе есть таблица с атрибутами http://prntscr.com/a82k5v где entityId Это id продукта. Так вот по результатам данной таблицы нужно и сделать выборку продуктов(таблица product). К примеру у меня приходит массив на сортировку вида $params(attributeId, optionId) $params = [ 80 => 360, 82 => 362, ]; В итоге должно получится два продукта в id 22 и 24. Т.е смысл в том что все атрибуты в массиве params должны присутствовать у товара. Как это сделать все одним запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 10:15 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
см HAVING+GROUP BY Помогите составить запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 10:25 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovсм HAVING+GROUP BY Помогите составить запрос честно не особо понял как это сделать, не могли бы Вы детальней написать как это реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 12:29 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
хотя если не ошибаюсь получилось :) Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 12:38 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
pogran, Если версия MySQL ниже, чем 5.7, то перепишите IN (SELECT ...) на JOIN, а то очень медленно будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 12:48 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
ага спасибо за подсказку. что-то я проверил запрос неверно работает( . выборку не так выдаёт. к примеру есть данные 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. У меня сейчас получаются левые данные( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 13:55 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
хотя вручную прописал вот такой запрос 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 и выдало только один результат.видимо фреймворк где-то скобки расставляет не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 14:03 |
|
||
|
Как грамотно сделать выборку для сортировки
|
|||
|---|---|---|---|
|
#18+
Для вот такой бд выборка не верно работает 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 значения, а надо чтобы максимум одно бралось. Как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2016, 15:11 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39179556&tid=1832107]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 470ms |

| 0 / 0 |
