Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Помогите составить запрос (http://www.flasher.ru/forum/showthread.php?t=88793)

Golovach 30.11.2006 18:13

Помогите составить запрос
 
Вобщем, задача такая - вывести рейтинг песен, за которые голосовали пользователи.
1. Есть таблица с песнями
2. Есть таблица с голосами, в которой след поля: голос (от -2 до +2 за песню), id пользователя, id песни, дата голосования.

Задача - отсортировать песни по сумме голосов в таблице номер 2. Сам понимаю, что ничего сложного, но вся загвоздка в том, что один пользователь может проголосовать несколько раз за одну и туже песню. А вывести нужно голоса за неделю...
Заранее спасибо.

Ekzi 30.11.2006 18:47

язык какой ? flash?

Skubent 30.11.2006 19:11

Цитата:

Сообщение от Golovach
Задача - отсортировать песни по сумме голосов в таблице номер 2.

ORDER BY SUM(`voite`) ASC | DESC

Цитата:

Сообщение от Golovach
Сам понимаю, что ничего сложного, но вся загвоздка в том, что один пользователь может проголосовать несколько раз за одну и туже песню.

И что ? Точнее, считать надо все голоса, или от одного юзера - один голос, если один голос, то какой именно ?

Цитата:

Сообщение от Golovach
А вывести нужно голоса за неделю...

WHERE `voite_date` < "2006-11-30 00:00:00" AND `voite_date` > "2006-11-23 00:00:00"

Golovach 01.12.2006 12:05

Хм, выборка идет из разных таблиц, как их правильно объединить в запросе?

Skubent 01.12.2006 12:41

FROM `voite_table` LEFT JOIN `song_table` ON (`song_table`.`id` = `voite_table`.`song_id`)

Golovach 01.12.2006 12:49

Спасибо, щас буду пробовать. Если что - отпишусь.

Golovach 02.12.2006 12:57

Вот этот запрос:

$query = "SELECT * FROM songs LEFT JOIN golos ON (golos.song_id = songs.id)";

выбирает все песни, за которые проголосовали, причем, если голосовали несколько раз, он выбирает несколько раз. Пробовал отсортировать вот так:

$query = "SELECT * FROM songs LEFT JOIN golos ON (golos.song_id = songs.id) ORDER BY SUM(golos.golos)";

...выдает ошибку.
Как избежать вывода нескольких песен и сделать сортировку?

Golovach 02.12.2006 13:38

Все, лекарство нашел:
$query="SELECT songs.song, songs.id, SUM(golos.golos) AS golosa
FROM songs LEFT OUTER JOIN golos ON golos.song_id = songs.id
GROUP BY songs.song
ORDER BY golosa DESC";


Часовой пояс GMT +4, время: 02:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.