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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подсчет рейтинга, поможите с SQL 
:(
    Опции темы
Vaulter
Дата 18.12.2003, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



есть две таблицы: файлов, и рейтинга онных:
files:
fileid int,
name VARCHAR(50),
path VARCHAR(50).

rating
fileid INT, //ссылка на файл которому ставится оценка
mark INT. //сама оценка

такой запрос к примеру:

SQL
SELECT *,AVG(mark) as rating FROM files LEFT JOIN rating USING (fileid)
GROUP BY files.fileid


работает все четко, с одним но:
если в таблице rating нет оценок вообще, то возвращается пустая строка,
а нужно чтобы возвращался имеено 0 (ноль)......
потому что в коде скажем...подстановка несколько затруднена


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


Эксперт
***


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

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



пжлста!...оч надо


--------------------
PM MAIL WWW ICQ   Вверх
Лкшы
Дата 19.12.2003, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно делать выборку через хранимую процедуру.
в IB это будет так:

CREATE PROCEDURE RATING
RETURNS (
FILEID INTEGER,
RATING INTEGER)
AS
BEGIN
for SELECT files.fileid,AVG(mark) FROM files LEFT JOIN rating USING (fileid)
GROUP BY files.fileid
INTO :FILEID,:RATING
do
begin
IF(RATING is null) then rating=0;
suspend;
end
END

после чего делать выборку из процедуры

select * from rating


PM MAIL   Вверх
Vaulter
Дата 19.12.2003, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Лкшыв том то и дело что в mySQL нет пока функции...а ждать до 5ой версии низя...


--------------------
PM MAIL WWW ICQ   Вверх
Cashey
Дата 20.12.2003, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



А если принудительно заполнять справочник нулями?


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vaulter
Дата 22.12.2003, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Cashey
смотри, при новом файле, добавляем 0 в рейтинг, тогда...
когда ставится оценка 5 баллов, то получается среднее в 2.5 (0+5)/2, так как у нас уже 2 оценки!....
а должно то быть 5 средним...


--------------------
PM MAIL WWW ICQ   Вверх
Лкшы
Дата 22.12.2003, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тогда попробуй добавить признак - "нет оценки" и ставь рейтинг = 0, а при добавлении проверяй его,
если установлен - то не считать, а писать как есть и сбрасывать признак, иначе считать.

PM MAIL   Вверх
Vaulter
Дата 22.12.2003, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Лкшы
попробуем, Крис ))


--------------------
PM MAIL WWW ICQ   Вверх
leniviy
Дата 31.12.2003, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А в MYSQL есть условная подстановка? типа как в MSSQL:
Код
case when avg(mark) is null then 0 else avg(mark) end


Это сообщение отредактировал(а) leniviy - 31.12.2003, 14:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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