Не пойму как сделать выборку....

SnowB

Guest
Не пойму как сделать выборку....

Есть БД... структура такая:


Если оставляют отзыв о компании то в таблице review review.comp_id review.comp_id присваивается идшник компании из таблицы company, a art_id присваивается NULL. И с отзывами по статьям аналогично review.art_id = artice.art_id а review.comp_id = company.comp_id ...

А теперь внимание вопрос..
Нужно сделать выборку в которой будут присутсвовать средние значения оценок ( star_id ) и голичество оценок, как компаний так и статей, сгруппированные по компаниям....

Пока сделал только рейтинг для компаний... дальше мне оперативки не хватает =) я висну =)

Вот тут навоял...

SELECT * , COUNT( * ) AS countstar , AVG(star_id) AS avgstar , company.name AS nazv , company.comp_id AS real_comp_id, IFNULL(AVG(star_id),'0') AS avgstars FROM company LEFT JOIN review ON company.comp_id = review.comp_id GROUP BY company.comp_id ORDER BY avgstars


Спасибо хотя бы за то что прочитали это до конца =)

-~{}~ 08.08.05 12:05:

А вот после того как подсоеденяю третью таблицу не знаю как теперь подсчитывать AVG & COUNT

SELECT * , COUNT( * ) AS countstar , AVG(star_id) AS avgstar , company.name AS nazv , company.comp_id AS real_comp_id, IFNULL(AVG(star_id),'0') AS avgstars FROM company LEFT JOIN review ON company.comp_id = review.comp_id LEFT JOIN articles ON review.comp_id = articles.comp_id GROUP BY company.comp_id ORDER BY avgstars
 

SelenIT

IT-лунатик :)
Зачем подсоединять третью и четвертую таблицу? Чтобы этим же запросом вывести тексты отзывов?
 

SnowB

Guest
SelenIT,
нет.
нужно посчитать средний бал отзывов по компаниям и средний бал отзывов по статьям написанными этими компаниями.

И вывести в одной таблице с возможностью сортировки..
 

SelenIT

IT-лунатик :)
Пардон, не сразу врубился. А где в этой структуре значения оценок?
 

alpine

Новичок
SnowB
Из каких соображений у тебя все отзывы о компании и о статьях хрянятся в одной таблице, причем отзыв о компании отличется NULL-ом в поле art_id?
 

alpine

Новичок
SnowB
IMHO
1) Я сделал бы две таблицы одну для отзывов о компании другую о статье, мне кажется так более прозрачно.
2) Я не понял что ты пытался этим запросом сделать.

Поехали дальше, как мне кажется последовательность действий должны быть следующая
- Выбрать средний бал по статьям во временную таблицу там же можно посчитать кол-во статей. Тоесть у тебя в этой таблице будут company_id, avg_article_mark, article_cnt
- Выбрать средний бал по компаниям и заджоинить с временной таблицей по comany_id и указать требуемую сортировку.

в итоге ты получишь company_id, SOME ABOUT COMPANY FIELDS ... , avg_company_mark, avg_article_mark, article_cnt
Затем отдельным запросом выбираешь кол-во компаний.
Вроде все.
Да и если у тебя версия мускуля поддерживает вложенные запросы то можешь сделать через них.
 

SnowB

Guest
alpine
То что пытаюсь сделать здесь http://www.propereezd.ru/companies.php

В принцепе реализовать удалось через два запроса, но имхо не очень рационально...

Буду думать ещё...

Всем спасибо
 
Сверху