Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос артистов с подзапросами 
:(
    Опции темы
mstdmstd
Дата 1.6.2015, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Всем привет,
Есть запрос в котором выбираются артисты кол-во обзоров к этим артистам и у скольких обзоров стоит пометка "inappropriate" :
Код

SELECT  `wp_aaso_artists`.* , (  SELECT count(*) 
  FROM `wp_aaso_artists_reviews` 
 WHERE `wp_aaso_artists_reviews`.`artist_id`= `wp_aaso_artists`.`ID` ) as reviewsCount, 
 (   SELECT count(*) 
  FROM `wp_aaso_artists_reviews_inappropriate`, `wp_aaso_artists_reviews` 
 WHERE `wp_aaso_artists_reviews_inappropriate`.`artist_review_id`= `wp_aaso_artists_reviews`.`ID` and    `wp_aaso_artists_reviews`.`artist_id`= `wp_aaso_artists`.`ID`    ) 
  as inappropriateReviewsCount 
  FROM `wp_aaso_artists` 
  HAVING reviewsCount > 0  and inappropriateReviewsCount > 0  LIMIT 5 OFFSET  0


И все хорошо и в inappropriateReviewsCount - сумма сколько именно обзоров с пометкой "inappropriate", но в данном запросе нужно сколько обзоров(wp_aaso_artists_reviews) 
имеют ссылку на "inappropriate" пометку, а не wp_aaso_artists_reviews_inappropriate . Как это лучше сделать?

Спасибо!

Это сообщение отредактировал(а) mstdmstd - 2.6.2015, 13:07
PM MAIL   Вверх
Akina
Дата 1.6.2015, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Лучше - грамотно поставить задачу. Дать DDL таблицы, репрезентативный набор данных и желаемый на этих данных результат с пояснениями, почему именно так.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mstdmstd
Дата 2.6.2015, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Таблицы 
Код

CREATE TABLE IF NOT EXISTS `wp_aaso_artists` (
`ID` int(10) unsigned NOT NULL,
  `name` varchar(50) NOT NULL DEFAULT '',
  `ordering` int(10) unsigned DEFAULT NULL,
  `is_active` enum('A','I') DEFAULT 'I',
  `email` varchar(50) NOT NULL DEFAULT '',
  `site` varchar(100) NOT NULL DEFAULT '',
  `birthday` date NOT NULL,
  `registered_at` datetime NOT NULL,
  `info` mediumtext,
  `updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ;

CREATE TABLE IF NOT EXISTS `wp_aaso_artists_reviews` (
`ID` int(10) unsigned NOT NULL,
  `user_id` bigint(20) unsigned NOT NULL,
  `artist_id` int(10) unsigned NOT NULL,
  `review_text` text NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ;

CREATE TABLE IF NOT EXISTS `wp_aaso_artists_reviews_inappropriate` (
`ID` int(10) unsigned NOT NULL,
  `user_id` bigint(20) unsigned NOT NULL,
  `artist_review_id` int(10) unsigned NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ;

  
wp_aaso_artists - таблица артистов с ключевыми полями  `ID`, `name` - все просто.
wp_aaso_artists_reviews - таблица обзоров(review_text) к этим артист Связь с артистами поле artist_id - также все просто .
wp_aaso_artists_reviews_inappropriate - таблица жалоб на обзоров выше, если есть строка - то есть жалоба.

Создать в wp_aaso_artists_reviews будево или целое поле не подходит, так как нужно инфа, от кого жалоба.
Первоначальный запрос читает СКОЛЬКО жалоб было на ревью артиста - что во многих случаях нужно.
В данном случае СКОЛЬКО жалоб НЕ важно, но важно, на сколько ревью были жалобы, что и не получилось...
Надеюсь, я все понятно изложил...   
  

Это сообщение отредактировал(а) mstdmstd - 2.6.2015, 10:52
PM MAIL   Вверх
Akina
Дата 2.6.2015, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Теперь свяжите правильно эти три таблицы:
Код

FROM wp_aaso_artists a
   , wp_aaso_artists_reviews r
   , wp_aaso_artists_reviews_inappropriate i
WHERE a.id = r.artist_id
  AND r.id = i.artist_review_id

Похоже на правду?
В такой отбор попадут исключительно обзоры, на которые была хотя бы одна жалоба.
Чтобы их посчитать, достаточно сгруппировать правильно (в каком там разрезе нужна статистика - общее число? для каждого артиста?) и посчитать количество с отсевом дубликатов COUNT(DISTINCT).

ЗЫ. Откорректируйте свой начальный пост и сделайте переносы строк, чтобы страницу не растягивало.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mstdmstd
Дата 3.6.2015, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Спасибо за участие!
Я немного изменил запрос и заместо звездочки указал какие поля счиьать с условием distict "distinct wp_aaso_artists_reviews_inappropriate.artist_review_id".
И полностю запрос выглядит так:
Код


SELECT distinct `wp_aaso_artists`.* , (  SELECT count(distinct wp_aaso_artists_reviews.ID ) 
  FROM `wp_aaso_artists_reviews` 
 WHERE `wp_aaso_artists_reviews`.`artist_id`= `wp_aaso_artists`.`ID` ) as reviewsCount, 
  (   SELECT count(distinct wp_aaso_artists_reviews_inappropriate.artist_review_id ) 
  FROM `wp_aaso_artists_reviews_inappropriate`, `wp_aaso_artists_reviews` 
 WHERE `wp_aaso_artists_reviews_inappropriate`.`artist_review_id`= `wp_aaso_artists_reviews`.`ID` and    `wp_aaso_artists_reviews`.`artist_id`= `wp_aaso_artists`.`ID`    ) as inappropriateReviewsCount 

  FROM `wp_aaso_artists` 
  HAVING reviewsCount > 0  and inappropriateReviewsCount > 0 


Я проверил - работает т вроде подвохов нет
Мне удобнее сделать с подзапросом - это конструктор и в зависимости от от выбранного фильтра подставляются разные поля
PM MAIL   Вверх
Akina
Дата 3.6.2015, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Тормозить будет безбожно... но это твои проблемы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.