|
|
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, Уважаемые форумчане! Вопрос следующий, есть две таблицы. 1. Таблица товаров buyer_goods buyer_goods ( id int(11) NOT NULL AUTO_INCREMENT order_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID заказа' buyer_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID покупателя' good_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID товара' user_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID продавца' title varchar(255) DEFAULT NULL COMMENT 'Название товара' description text DEFAULT NULL COMMENT 'Описание товара' PRIMARY KEY (id) 2. Таблица сообщений к этим товарам correspondence correspondence ( id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID Переписки' buyer_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID покупателя' user_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID продавца' good_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID товара' order_id int(11) UNSIGNED DEFAULT NULL COMMENT 'ID заказа' body_correspondence text DEFAULT NULL COMMENT 'Текст сообщения покупателя' body_seller text DEFAULT NULL COMMENT 'Текст сообщения продавца' date int(11) UNSIGNED DEFAULT NULL COMMENT 'Дата добавления сообщения' show_buyer smallint(1) UNSIGNED DEFAULT NULL COMMENT 'Просмотрено ли сообщение покупателем: null-нет1-да' show_buyer_date int(11) UNSIGNED DEFAULT NULL COMMENT 'Дата просмотра покупателем' UNIQUE INDEX id (id) Задача: надо вывести список всех товаров с дополнительным полем correspondence.show_count , в котором выводится соответствующее значение ДЛЯ КАЖДОГО ТОВАРА. Для получения результатов для этого поля возможно надо сделать подзапрос с условием на совпадение с order_id, но никак не могу решить эту задачку. То есть, если correspondence.order_id = buyer_goods.order_id , то выводить соответствующий суммированный результат (кол-во непросмотренных сообщений) для каждого товара. Как вы поняли сообщений для каждого заказа может быть несколько, либо ничего - NULL. Сделал вот так, но не работает так как надо. Просто выводит список товаров. SELECT buyer_goods.id buyer_goods.good_id buyer_goods.buyer_id buyer_goods.order_id buyer_goods.amount buyer_goods.currency buyer_goods.title buyer_goods.title_en buyer_goods.date_start correspondence.show_countFROM buyer_goods INNER JOIN (SELECT COUNT(*) AS show_count correspondence.buyer_id FROM correspondence correspondence WHERE correspondence.show_buyer IS NULL) correspondence ON buyer_goods.buyer_id = correspondence.buyer_idWHERE buyer_goods.buyer_id = 52GROUP BY buyer_goods.idORDER BY buyer_goods.id DESC Помогите, пожалуйста! Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2015, 17:22:44 |
|
||
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
Anrysys, в деривед-тэйбле как минимум не хватает группировки по товару. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2015, 18:42:53 |
|
||
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, если по товару могут отсутствовать сообщения вообще, то имеет смысл использовать LEFT [OUTER] JOIN вместо INNER JOIN-а ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2015, 18:44:35 |
|
||
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Так группировка по товарам есть "GROUP BY buyer_goods.id", сейчас попробую с LEFT [OUTER] JOIN... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2015, 20:53:41 |
|
||
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, уже лучше - список товаров теперь выводится полный, но в поле correspondence.show_count ДЛЯ КАЖДОГО ТОВАРА стоит одно значение - "3" скрин: http://piccy.info/view3/7705726/6cb64662a52ad425a28f205d2509bc7f/1200/ Должно быть не 3, a 2 - для order_id=1145 и 1 - для order_id=1054. Вот скрин: http://piccy.info/view3/7705782/03d2c4b1ef4927d0942481bfcdbd8a6e/orig/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2015, 21:11:16 |
|
||
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
а в чём специфичность запроса? неправильно заданный вопрос ведёт к остуствию ответа. правильный вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 03:33:25 |
|
||
|
Как выполнить специфический подзапрос?
|
|||
|---|---|---|---|
|
#18+
AnrysysДобрый Э - Эх, Так группировка по товарам есть "GROUP BY buyer_goods.id", сейчас попробую с LEFT [OUTER] JOIN... Если что, до "деривед тэйбл" в твоем случае это как раз твой "специфический подзапрос" и в нем как раз напрочь отсутствует группировка по товару, а есть только (причем неявная) группировка по покупателю.: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. То есть, по сути, твой подзапрос расчитывает кол-во непойми чего для покупателя. после чего приписывает это кол-во всем товарам, купленным данным покупателем. Теперь понятнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 05:25:40 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38874198&tid=1833600]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 300ms |

| 0 / 0 |
