Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / (SQL) помогите с запросом / 24 сообщений из 24, страница 1 из 1
05.12.2005, 22:47:13
    #33418356
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Доброго времени суток. Очень нужна помощь с запросом.
Есть 2 таблицы: items и votes (картинки и голосовалка)
в items ключ id, а votes имеет поле for_id
Т.е. когда юзер голосует за item_id=35 добавляется запись в votes
и имеет в поле for_id значение 35 и значение количества очков (votes.points)

так вот вопрос в том, как составить запрос для формирования рейтинга items по значению количества очков в таблице votes.

пробовал так для выяснения места в рейтинге (пока додумался только до этого :( ):

Код: plaintext
SELECT COUNT(*)+ 1  FROM votes WHERE SUM(points)>(SELECT DISTINCT for_id, SUM(points) FROM votes);
- не работает...

А как составить запрос, чтобы он был упорядочен по рейтингу, я вообще не предстваляю...
ПОМОГИТЕ.
...
Рейтинг: 0 / 0
05.12.2005, 22:51:38
    #33418359
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
т.е. извините с кодом ошибся...
вот так пробовал:

SELECT COUNT(*)+1 FROM votes WHERE SUM(points)>(SELECT SUM(points) FROM votes WHERE id='12323');
відает что неверно использую GROUP.
КАК СДЕЛАТЬ?
...
Рейтинг: 0 / 0
06.12.2005, 12:02:15
    #33419062
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Версия MySQL?

Кинь небольшой дамп таблиц.
...
Рейтинг: 0 / 0
06.12.2005, 14:03:23
    #33419526
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE "items" (
  "id" bigint( 20 ) unsigned NOT NULL,
.....
  PRIMARY KEY  ("id"),
  UNIQUE KEY "id" ("id")
) AUTO_INCREMENT= 4  ;

....

CREATE TABLE "votes" (
  "id" bigint( 20 ) unsigned NOT NULL,
  "for_id" int( 11 ) default NULL,
.....
  "points" bigint( 20 ) default NULL,
  PRIMARY KEY  ("id"),
  UNIQUE KEY "id" ("id")
) AUTO_INCREMENT= 7  ;
......

Это структура таблиц - важные части..
В общем нужно сформировать запрос рейтинга items по количеству очков (сумма points в табл. votes для каждого for_id)..

ПОМОГИТЕ
...
Рейтинг: 0 / 0
06.12.2005, 14:08:07
    #33419546
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Mysql версия -
Client API version - 4.1.9
...
Рейтинг: 0 / 0
06.12.2005, 14:40:43
    #33419660
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
twistfire , а INSERT\'ы я сам буду придумывать? ;)

Неуверен, что подойдет, т.к. не проверял, но попробуй следующее:
Код: plaintext
\nSELECT COUNT(*)+ 1  FROM votes WHERE SUM(points)>ANY(SELECT SUM(points) FROM votes WHERE id=\'12323\')\n

Как я понимаю, это продолжение топика "рейтинг записи в БД"? :)

И еще... текст ошибки?
...
Рейтинг: 0 / 0
06.12.2005, 15:17:25
    #33419822
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Код: plaintext
SELECT COUNT(*)+ 1  FROM votes WHERE SUM(points)>ANY(SELECT SUM(points) FROM votes WHERE id= 2323 );

Этот запрос всегда выдает количество записей в votes...

Нет, это не продолжение темы "рейтинг записи в БД" :)
...
Рейтинг: 0 / 0
06.12.2005, 15:20:21
    #33419832
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Дык, а что за ошибка?
...
Рейтинг: 0 / 0
06.12.2005, 15:21:37
    #33419837
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
ну в смысле выдает количество записей в votes+1.
Но дело в принципе те в этом...
Мне нужно сформировать запрос, чтобы получить не место в рейтинге конкретной записи, а чтобы получить весь рейтинг.

То есть упорядочивание items по sum(points) в votes.
...
Рейтинг: 0 / 0
06.12.2005, 15:22:30
    #33419841
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Ну так отсортируй ....
...
Рейтинг: 0 / 0
06.12.2005, 15:24:48
    #33419854
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
BerkutДык, а что за ошибка?

Ошибка в том, что я неверно излагаю.
Мне нужно выполнить запрос, который вернул бы список items упорядоченный по sum(points)...
а я начал відумівать запросы для выяснения "рейтинга текущей item".
...
Рейтинг: 0 / 0
06.12.2005, 15:28:09
    #33419869
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Валентин КНу так отсортируй ....

как и что сортировать? Я не пониаю как запрос написать :( Помогите, если возможно. Очень нужно.
...
Рейтинг: 0 / 0
06.12.2005, 15:30:58
    #33419880
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
twistfire
Код: plaintext
SELECT COUNT(*)+ 1  FROM votes WHERE SUM(points)>ANY(SELECT SUM(points) FROM votes WHERE id= 2323 );
Этот запрос всегда выдает количество записей в votes...


если это тот запрос, тогда
Код: plaintext
1.
2.
3.
SELECT COUNT(*)+ 1  , SUM(points) as Sum_Points
FROM votes 
WHERE SUM(points)>ANY(SELECT SUM(points) FROM votes WHERE id= 2323 )
Order By Sum_Points;

Если версия не 5.0, тогда Order By 2;
Если обратная сортировка - добавить DESC
...
Рейтинг: 0 / 0
06.12.2005, 15:44:50
    #33419941
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
использую Ваш запрос для віяснения рейтинга
SELECT COUNT(*)+1 , SUM(points) as Sum_Points FROM votes WHERE SUM(points)>ANY(SELECT SUM(points) FROM votes WHERE id=1) Order By 2;

выдает тоже - количество записей в votes+1.

Давайте забудем все запросы которые использовались ранее

Итак: мне необходим запрос, который будет выбирать из items так, чтобы упоядочить результат по sum(points) в табл. votes.
Как?
Связующее поле items.id->votes.for_id (т.е. проголосовали за item #1, в votes добавились очки и в поле votes.for_id - 1).
...
Рейтинг: 0 / 0
06.12.2005, 16:11:10
    #33420049
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Чем не устравивает вариант определения рейтинга записей, что я вам когда-то давно предлагал?

Как найти пять "лучших" записей в таблице
...
Рейтинг: 0 / 0
06.12.2005, 16:21:33
    #33420090
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
BerkutЧем не устравивает вариант определения рейтинга записей, что я вам когда-то давно предлагал?

Как найти пять "лучших" записей в таблице

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

у меня 2 таблицы, причем одна из них - элементы - которые необходимо упорядочить, а вторая - таблица голосований (где каждая строка предстваляет собой id в поле items (то за что голосуют) и количесвто очков єтого голоса.)

Т.е. мне необходимо упорядочить єлементы таблицы items так, чтобы
первым был элемент с наибольши количесвтом очков, а очки считаются по таблице votes.

Понятна схема работы голосования?
...
Рейтинг: 0 / 0
06.12.2005, 16:34:42
    #33420138
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Можно уже тогда привести полный дамп таблиц?

А то мне не совсем понятно - зачем вообще нужна в данном случае вторая таблица.
...
Рейтинг: 0 / 0
06.12.2005, 16:40:54
    #33420168
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
привожу дамп таблиц:

Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
CREATE TABLE `concursants` (
  `id` bigint( 20 ) unsigned NOT NULL auto_increment,
  `name_familia` varchar( 70 ) default NULL,
  `mainfoto` varchar( 70 ) default NULL,
  `birth` date default NULL,
  `concurs_y` int( 11 ) default NULL,
  `height_width` varchar( 10 ) default NULL,
  `params` varchar( 15 ) default NULL,
  `zodiac` varchar( 70 ) default NULL,
  `eyes_color` varchar( 70 ) default NULL,
  `hair_color` varchar( 70 ) default NULL,
  `education` varchar( 70 ) default NULL,
  `languages` varchar( 200 ) default NULL,
  `proffession` varchar( 70 ) default NULL,
  `mesto_uchebi_raboti` varchar( 70 ) default NULL,
  `main_occupation` varchar( 70 ) default NULL,
  `is_computer_aided` tinyint( 1 ) default NULL,
  `another_champ` tinyint( 1 ) default NULL,
  `is_model` tinyint( 1 ) default NULL,
  `hobby` varchar( 100 ) default NULL,
  `sport` varchar( 70 ) default NULL,
  `fav_book_auth` varchar( 200 ) default NULL,
  `fav_music` varchar( 200 ) default NULL,
  `fav_movie` varchar( 200 ) default NULL,
  `fav_food` varchar( 200 ) default NULL,
  `fav_flowers` varchar( 200 ) default NULL,
  `fav_tv` varchar( 200 ) default NULL,
  `fav_city_place` varchar( 200 ) default NULL,
  `fav_occupation` varchar( 200 ) default NULL,
  `antifav_occupation` varchar( 200 ) default NULL,
  `people_fav` varchar( 100 ) default NULL,
  `nedostatki` varchar( 200 ) default NULL,
  `women_ideal` varchar( 200 ) default NULL,
  `man_ideal` varchar( 200 ) default NULL,
  `dream` varchar( 200 ) default NULL,
  `slogan` text,
  `miss_should_be` varchar( 200 ) default NULL,
  `visits` bigint( 20 ) default '1',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT= 4  ;


INSERT INTO `concursants` (`id`, `name_familia`, `mainfoto`, `birth`, `concurs_y`, `height_width`, `params`, `zodiac`, `eyes_color`, `hair_color`, `education`, `languages`, `proffession`, `mesto_uchebi_raboti`, `main_occupation`, `is_computer_aided`, `another_champ`, `is_model`, `hobby`, `sport`, `fav_book_auth`, `fav_music`, `fav_movie`, `fav_food`, `fav_flowers`, `fav_tv`, `fav_city_place`, `fav_occupation`, `antifav_occupation`, `people_fav`, `nedostatki`, `women_ideal`, `man_ideal`, `dream`, `slogan`, `miss_should_be`, `visits`) VALUES ( 1 , 'Нейман Ольга Викторовна', 'neiman.jpg', '1986-07-24',  2005 , '178_56', '92/61/89', 'Лев', 'зеленый', 'каштан', 'незаконченное высшее', 'Английский', '---', 'Национальный Университет кораблестроения', 'студентка',  1 ,  0 ,  1 , 'люблю книги, мечтать', 'да. баскетбол', 'Анхель де Куатье', 'Океан Эльзы', '', '', 'нарцис', '--', 'Набережная', 'жить', 'ожидания и сомнения', 'искренность и доброта', 'не знаю', '--', '--', 'прожить непустую жизнь', 'только вперед!!', 'привлекательной, ласковой и самой доброй!',  92 );
INSERT INTO `concursants` (`id`, `name_familia`, `mainfoto`, `birth`, `concurs_y`, `height_width`, `params`, `zodiac`, `eyes_color`, `hair_color`, `education`, `languages`, `proffession`, `mesto_uchebi_raboti`, `main_occupation`, `is_computer_aided`, `another_champ`, `is_model`, `hobby`, `sport`, `fav_book_auth`, `fav_music`, `fav_movie`, `fav_food`, `fav_flowers`, `fav_tv`, `fav_city_place`, `fav_occupation`, `antifav_occupation`, `people_fav`, `nedostatki`, `women_ideal`, `man_ideal`, `dream`, `slogan`, `miss_should_be`, `visits`) VALUES ( 2 , 'Шапочка Наталья Викторовна', '5f2759151.jpg', '1985-01-15',  2005 , '171_50', '82/60/87', 'козерог', 'карие', 'черный', 'ХНУРЭ', 'Английский', '--', 'ХНУРЭ', '--',  1 ,  0 ,  0 , 'хореография', '--', 'П. Коэльо "Алхимик"', '--', '--', 'красная икра', 'Лилии', 'Дискавери', 'Парк Шевченко', '', '', '', 'Курение', '', '', 'Добиться успехов', 'Никого не бойся, никому не верь!!!', 'Целеустремленной!!!',  73 );
INSERT INTO `concursants` (`id`, `name_familia`, `mainfoto`, `birth`, `concurs_y`, `height_width`, `params`, `zodiac`, `eyes_color`, `hair_color`, `education`, `languages`, `proffession`, `mesto_uchebi_raboti`, `main_occupation`, `is_computer_aided`, `another_champ`, `is_model`, `hobby`, `sport`, `fav_book_auth`, `fav_music`, `fav_movie`, `fav_food`, `fav_flowers`, `fav_tv`, `fav_city_place`, `fav_occupation`, `antifav_occupation`, `people_fav`, `nedostatki`, `women_ideal`, `man_ideal`, `dream`, `slogan`, `miss_should_be`, `visits`) VALUES ( 3 , 'Чугра Наталья Ивановна', 'chugra.jpg', '1984-03-07',  2004 , '181_62', '90/61/89', 'рыбы', 'голубой', 'русые', 'высшее', 'Английский, итальянский', 'инженер-технолог', 'НУК', 'работаю инженером',  1 ,  0 ,  0 , 'дизайн интерьера', 'плавание', 'Смит С.', 'Scorpions, Rock-n-Roll', 'Изгой', 'блины с начинкой', 'ромашки', 'не люблю', 'все места любимые', 'хорошее настроение', 'наглость', 'целеустремленность', 'любознательность', '--', '--', 'океан, кругосветное путешествие', '--', 'настоящей',  13 );

CREATE TABLE `votes` (
  `id` bigint( 20 ) unsigned NOT NULL auto_increment,
  `for_id` int( 11 ) default NULL,
  `ip_adr` varchar( 30 ) default NULL,
  `day_of_vote` date default NULL,
  `points` bigint( 20 ) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT= 7  ;

INSERT INTO `votes` (`id`, `for_id`, `ip_adr`, `day_of_vote`, `points`) VALUES ( 1 ,  1 , '127.0.0.1', '2005-12-02',  5 );
INSERT INTO `votes` (`id`, `for_id`, `ip_adr`, `day_of_vote`, `points`) VALUES ( 2 ,  2 , '127.0.0.1', '2005-12-02',  3 );
INSERT INTO `votes` (`id`, `for_id`, `ip_adr`, `day_of_vote`, `points`) VALUES ( 3 ,  1 , '127.0.0.1', '2005-12-05',  5 );
INSERT INTO `votes` (`id`, `for_id`, `ip_adr`, `day_of_vote`, `points`) VALUES ( 4 ,  2 , '127.0.0.1', '2005-12-05',  3 );
INSERT INTO `votes` (`id`, `for_id`, `ip_adr`, `day_of_vote`, `points`) VALUES ( 5 ,  3 , '127.0.0.1', '2005-12-05',  5 );
INSERT INTO `votes` (`id`, `for_id`, `ip_adr`, `day_of_vote`, `points`) VALUES ( 6 ,  1 , '81.17.128.254', '2005-12-04',  4 );

здесь аналогично таблицы concursants - конкурсантки,
votes - оценки жюри.

Необходимо сформировать рейтинг деушек по голованиям, по баллам - сумме points - которіе біли отданы ей (поле for_id).

Надеюсь теперь я понятно разъяснил?
...
Рейтинг: 0 / 0
06.12.2005, 17:10:34
    #33420288
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
drop table if exists t1;
create table t1  as select id, name_familia, visits from concursants;

( 3  row(s) affected)
( 0  ms taken)

select * from t1
Код: plaintext
1.
2.
3.
4.
    id  name_familia                visits
------  --------------------------  ------
     1  Нейман Ольга Викторовна         92
     2  Шапочка Наталья Викторовна      73
     3  Чугра Наталья Ивановна          13

Так что ли?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select t1.*, v.sum_points
from (
	select for_id, sum(points) as sum_points
	from votes
	group by for_id
	) v, t1
where t1.id=v.for_id
order by v.sum_points desc
Код: plaintext
1.
2.
3.
4.
    id  name_familia                visits  sum_points
------  --------------------------  ------  ----------
     1  Нейман Ольга Викторовна         92          14
     2  Шапочка Наталья Викторовна      73           6
     3  Чугра Наталья Ивановна          13           5
...
Рейтинг: 0 / 0
06.12.2005, 20:44:43
    #33420788
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
2 Berkut
это конечно круто :) - спасибо,
но нельзя ли обойтись без создания таблиц, так как запрос должен біть расчитан на веб-приложение?
...
Рейтинг: 0 / 0
06.12.2005, 21:49:11
    #33420845
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
в общем составил запрос так:
Код: plaintext
1.
2.
3.
4.
5.
select concursants.id,concursants.visits, concursants.name_familia, votes.for_id, COUNT(votes.for_id) as golosov, sum(votes.points) as sum_points
from votes, concursants 
WHERE concursants.id=votes.for_id 
AND concursants.concurs_y=".$year." 
group by votes.for_id 
ORDER BY sum_points DESC

Есть какие-то предложения по оптимизации кода, или может что-то криво?

Спасибо всем, кто помог. Особенно Berkut'у
(Где бы мне так хорошо выучить sql?)
...
Рейтинг: 0 / 0
07.12.2005, 09:33:54
    #33421198
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
twistfireно нельзя ли обойтись без создания таблиц, так как запрос должен біть расчитан на веб-приложение?Создание таблицы я сделал только для себя, для удобства.

twistfireв общем составил запрос так:Дык, так и не понял, тебе требуется найти порядок в сортировке или просто выполнить сортировку? ;)
...
Рейтинг: 0 / 0
07.12.2005, 09:36:39
    #33421202
twistfire
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
BerkutДык, так и не понял, тебе требуется найти порядок в сортировке или просто выполнить сортировку? ;)

и то и другое.
...
Рейтинг: 0 / 0
07.12.2005, 12:33:15
    #33421871
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SQL) помогите с запросом
Афтар, насколько я понял, ты не совсем представляешь себе как пользоваться sql, почитай пож-ста доку
http://www.mysql.ru/docs/gruber/
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / (SQL) помогите с запросом / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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