powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выполнить специфический подзапрос?
8 сообщений из 8, страница 1 из 1
Как выполнить специфический подзапрос?
    #38874198
Anrysys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, Уважаемые форумчане!
Вопрос следующий, есть две таблицы.

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

Помогите, пожалуйста! Заранее спасибо.
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874220
Anrysys,

в деривед-тэйбле как минимум не хватает группировки по товару.
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874222
Добрый Э - Эх,

если по товару могут отсутствовать сообщения вообще, то имеет смысл использовать LEFT [OUTER] JOIN вместо INNER JOIN-а
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874268
Anrysys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Так группировка по товарам есть "GROUP BY buyer_goods.id", сейчас попробую с LEFT [OUTER] JOIN...
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874276
Anrysys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

уже лучше - список товаров теперь выводится полный, но в поле 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/
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874354
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чём специфичность запроса?

неправильно заданный вопрос ведёт к остуствию ответа.

правильный вопрос.
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874359
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.
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_count

FROM 
     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_id

WHERE buyer_goods.buyer_id = 52
GROUP BY buyer_goods.id
ORDER BY buyer_goods.id DESC


То есть, по сути, твой подзапрос расчитывает кол-во непойми чего для покупателя. после чего приписывает это кол-во всем товарам, купленным данным покупателем.
Теперь понятнее?
...
Рейтинг: 0 / 0
Как выполнить специфический подзапрос?
    #38874582
Anrysys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Спасибо за помощь. Понять то понял, но реализовать не могу, видно не хватает знаний. Ну да ладно, будем учиться. В любом случае спасибо за помощь!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выполнить специфический подзапрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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