Forum Webscript.Ru

Общие => Базы данных => Тема начата: AlieN от 17 Июля 2002, 15:56:36

Название: Интересный запрос
Отправлено: AlieN от 17 Июля 2002, 15:56:36
вот такой:
select userid, race1, race2, race3, race4, (race1+race2+race3+race4) as total, day from gamerating where min(total) group by userid

Удивительно, но mysql говорит:
Invalid use of group function

В общем суть: надо узнать самое быстрое прохождение пользователя в по всем четырем гонкам

Как написать - хз
Название: Интересный запрос
Отправлено: ThE0ReTiC от 17 Июля 2002, 16:19:37
Попробуй:
select userid, race1, race2, race3, race4, (race1+race2+race3+race4) as total, day from gamerating  group by userid having min(total)
Название: Интересный запрос
Отправлено: AlieN от 17 Июля 2002, 16:28:12
ThE0ReTiC
Ответ MySQL:


Unknown column \'total\' in \'having clause\'
Название: Интересный запрос
Отправлено: Serchey от 17 Июля 2002, 16:34:45
Мoжет я не понял вопрос, но
SELECT userid, race1, race2, race3, race4,
(race1+race2+race3+race4) AS total, day
FROM gamerating
ORDER BY total DESC LIMIT 1;
возможно(должно) подойдет.
Название: Интересный запрос
Отправлено: AlieN от 17 Июля 2002, 16:57:47
Serchey

Цитировать
я не понял вопрос
- Да не понял(зачем не тогда группировка?)

Прочитай внимательно мой первый пост
Название: Интересный запрос
Отправлено: Covex от 17 Июля 2002, 16:59:58
select  min(race1+race2+race3+race4) as total, userid, day from gamerating group by userid, day - мин время по дням
Название: Интересный запрос
Отправлено: Covex от 17 Июля 2002, 17:12:32
select min(race1+race2+race3+race4) as total, userid, day from gamerating group by userid  -  минимальное время за все попытки
Название: Интересный запрос
Отправлено: AlieN от 17 Июля 2002, 17:20:49
Covex
Это понятно......
Только мне ещё надо узнать как он прошел каждую трассу за эту самую крутую попытку
Если я добавляю эти столбцы , то мне показываются лучшие его попытки в этих трассах (с различных заездов)

В общем вот дамп:
CREATE TABLE gamerating (
  userID int(11) NOT NULL default \'0\',
  day date NOT NULL default \'0000-00-00\',
  race1 double NOT NULL default \'0\',
  race2 double NOT NULL default \'0\',
  race3 double NOT NULL default \'0\',
  race4 double NOT NULL default \'0\'
) TYPE=MyISAM;

#
# Дамп данных таблицы `gamerating`
#

INSERT INTO gamerating VALUES (340, \'2002-07-10\', \'81.32123\', \'120.234\', \'116.233\', \'130.1234\');
INSERT INTO gamerating VALUES (36319, \'2002-07-10\', \'97.8390000000002\', \'93.517\', \'112.562999999999\', \'150.839\');
INSERT INTO gamerating VALUES (9158, \'2002-07-10\', \'83.0919999999999\', \'92.8869999999996\', \'105.203\', \'132.457999999999\');
INSERT INTO gamerating VALUES (9158, \'2002-07-10\', \'86.4840000000001\', \'90.2049999999998\', \'98.5719999999996\', \'132.198999999999\');
INSERT INTO gamerating VALUES (38055, \'2002-07-12\', \'85.5940000000003\', \'93.732\', \'105.973999999999\', \'136.714999999999\');
INSERT INTO gamerating VALUES (38120, \'2002-07-15\', \'82.7569999999996\', \'92.4009999999996\', \'108.804999999999\', \'154.802\');
INSERT INTO gamerating VALUES (208, \'2002-07-15\', \'85.9570000000006\', \'95.6819999999997\', \'108.683\', \'143.043999999999\');
INSERT INTO gamerating VALUES (38055, \'2002-07-15\', \'83.6909999999999\', \'92.2600000000002\', \'103.247999999999\', \'135.828999999999\');
INSERT INTO gamerating VALUES (38055, \'2002-07-16\', \'84.9290000000004\', \'88.873\', \'98.5359999999997\', \'138.563999999999\');
INSERT INTO gamerating VALUES (9158, \'2002-07-17\', \'80.366\', \'81.8229999999997\', \'91.3629999999997\', \'124.497999999999\');

Что должно показаться:
9158 2002-07-17  80.366 81.8229999999997 91.3629999999997 124.497999999999 378.05
38055 2002-07-16  84.9290000000004 88.873 98.5359999999997 138.563999999999 410.902
Название: Интересный запрос
Отправлено: Covex от 17 Июля 2002, 18:40:12
select min(race1+race2+race3+race4) as total, userid, day, race1, race2, race3, race4 from gamerating group by userid
это гонит пургу
а это вроде нет
select min(race1+race2+race3+race4) as total, userid, day, race1, race2, race3, race4 from gamerating group by userid, day
вывод ---------  видимо, (ИМХО) надо делать  временную таблицу
Название: Интересный запрос
Отправлено: Covex от 17 Июля 2002, 19:39:43
MS access не хавает
 select min(race1+race2+race3+race4) as total, userid, day, race1, race2, race3, race4 from gamerating group by userid
пишет
Попытка выполнить запрос, который не включает указанное выражение  как часть статистической функции или группы. (Ошибка 3122)
Название: Интересный запрос
Отправлено: Serchey от 17 Июля 2002, 23:05:36
Верняк, без временной таблици не обойтись!
Название: Интересный запрос
Отправлено: AlieN от 18 Июля 2002, 13:08:02
Напишите плиз как для чайника как это сделать :)
Название: Интересный запрос
Отправлено: Alexandr от 18 Июля 2002, 13:23:41
CREATE TEMPORARY TABLE tmp SELECT * FROM gamerating WHERE 1=0;
select min(race1+race2+race3+race4) as total, userid from gamerating group by userid;
в цикле для каждого userid{
INSERT INTO tmp SELECT *, (race1+race2+race3+race4) as total FROM gamerating WHERE userID=$userID AND ROUND((race1+race2+race3+race4), 5)=ROUND($total, 5);
}
SELECT * FROM tmp;
Название: Интересный запрос
Отправлено: Serchey от 18 Июля 2002, 16:29:25
Я бы сделал это так:

CREATE TEMPORARY TABLE tmp (
userID int(11) NOT NULL default \'0\',
total double NOT NULL default \'0\'
) TYPE=HEAP;

INSERT INTO tmp SELECT userid, min(race1+race2+race3+race4)  FROM gamerating GROUP BY userid;

SELECT g.userid, g.race1, g.race2, g.race3, g.race4, (g.race1+g.race2+g.race3+g.race4) as total, g.day FROM
gamerating g, tmp t WHERE (g.race1+g.race2+g.race3+g.race4)=t.total and g.userid=t.userid;
Название: Интересный запрос
Отправлено: Covex от 19 Июля 2002, 00:08:51
Alexandr
Serchey
чёй- то я ваши конструкции нефига не понял.
Serchey в том виде в каком написано оно не может работать.

Что-то в этом мире не так... Надо жрецов спросить. Может они помогут. Я лично нефига из  временой таблицы не высосал ->  ошибки при группировке
Название: Интересный запрос
Отправлено: Covex от 19 Июля 2002, 01:40:04
Цитировать
Don\'t use this feature if the columns you omit from the GROUP BY part aren\'t unique in the group! You will get unpredictable results.

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

unique in the group! ---??????
Название: Интересный запрос
Отправлено: Alexandr от 19 Июля 2002, 09:04:04
2Covex А что у в моей-то проге не понятно? Вродь все понятно объяснил.

Цитировать
Don\'t use this feature if the columns you omit from the GROUP BY part aren\'t unique in the group! You will get unpredictable results.

А эт я тя когда вылезает?
Название: Интересный запрос
Отправлено: Covex от 19 Июля 2002, 11:36:28
Alexandr
Цитировать
feature if the columns you omit from the GROUP BY
это из мана по майсклю.
 а касательно твоего кода... ты его пробывал?
Название: Интересный запрос
Отправлено: Alexandr от 19 Июля 2002, 11:51:07
Цитировать
а касательно твоего кода... ты его пробывал?

Конкретно этот нет. А вообще есть у мя подобный.
ЗЫ Ща заюзаю, что бы не сомневался....
Название: Интересный запрос
Отправлено: Covex от 19 Июля 2002, 12:06:57
ROUND((race1+race2+race3+race4), 5)=ROUND($total, 5);
мне кажется, здеся на вилы можно наткнуться и........ нафига круглить. Пока десять строчек и нет  рядом стоящих результов у каждого гонщика ничего, а если  что-нибудь типа 378.04969 378.04999.....
Название: Интересный запрос
Отправлено: Alexandr от 19 Июля 2002, 12:15:21
Вообщем вот код:connect();
mysql_query("CREATE TEMPORARY TABLE gamerating (
userID int(11) NOT NULL default \'0\',
day date NOT NULL default \'0000-00-00\',
race1 double NOT NULL default \'0\',
race2 double NOT NULL default \'0\',
race3 double NOT NULL default \'0\',
race4 double NOT NULL default \'0\'
)");
mysql_query("INSERT INTO gamerating VALUES (340, \'2002-07-10\', \'81.32123\', \'120.234\', \'116.233\', \'130.1234\'),
(36319, \'2002-07-10\', \'97.8390000000002\', \'93.517\', \'112.562999999999\', \'150.839\'),
(9158, \'2002-07-10\', \'83.0919999999999\', \'92.8869999999996\', \'105.203\', \'132.457999999999\'),
(9158, \'2002-07-10\', \'86.4840000000001\', \'90.2049999999998\', \'98.5719999999996\', \'132.198999999999\'),
(38055, \'2002-07-12\', \'85.5940000000003\', \'93.732\', \'105.973999999999\', \'136.714999999999\'),
(38120, \'2002-07-15\', \'82.7569999999996\', \'92.4009999999996\', \'108.804999999999\', \'154.802\'),
(208, \'2002-07-15\', \'85.9570000000006\', \'95.6819999999997\', \'108.683\', \'143.043999999999\'),
(38055, \'2002-07-15\', \'83.6909999999999\', \'92.2600000000002\', \'103.247999999999\', \'135.828999999999\'),
(38055, \'2002-07-16\', \'84.9290000000004\', \'88.873\', \'98.5359999999997\', \'138.563999999999\'),
(9158, \'2002-07-17\', \'80.366\', \'81.8229999999997\', \'91.3629999999997\', \'124.497999999999\')
");
mysql_query("CREATE TEMPORARY TABLE tmp SELECT * FROM gamerating WHERE 1=0");
$r=mysql_query("SELECT min(race1+race2+race3+race4) as total, userID from gamerating group by userID");
for($i=0;$i$f=mysql_fetch_array($r);
mysql_query("INSERT INTO tmp SELECT * FROM gamerating WHERE userID=$f[userID] AND ROUND((race1+race2+race3+race4), 5)=ROUND($f[total], 5)");
}
$r=mysql_query("SELECT *, (race1+race2+race3+race4) as total FROM tmp");
for($i=0;$i$f=mysql_fetch_array($r);
for($j=0;$jecho "
";
}
А вот результат:
208|2002-07-15|85.9570000000006|95.6819999999997|108.683|143.043999999999|433.366|
340|2002-07-10|81.32123|120.234|116.233|130.1234|447.91163|
9158|2002-07-17|80.366|81.8229999999997|91.3629999999997|124.497999999999|378.05|
36319|2002-07-10|97.8390000000002|93.517|112.562999999999|150.839|454.758|
38055|2002-07-16|84.9290000000004|88.873|98.5359999999997|138.563999999999|410.902|
38120|2002-07-15|82.7569999999996|92.4009999999996|108.804999999999|154.802|438.765|
Цитировать
нафига круглить

Мы что с тобой в космос отправляемся? :-)
Название: Интересный запрос
Отправлено: Covex от 19 Июля 2002, 12:26:09
Ты чувствуешь этот запах сынок....запах напалма --- так пахнет победа!!!
Название: Интересный запрос
Отправлено: AlieN от 19 Июля 2002, 13:03:57
Alexandr
Ну что я могу сказать: спасибаЧЧки чел
Название: Интересный запрос
Отправлено: AlieN от 19 Июля 2002, 13:04:26
теперь можно посмотреть результат
http://game.msport.ru
Название: Интересный запрос
Отправлено: Alexandr от 19 Июля 2002, 13:09:45
2AlieN хотел было сыграть без засорения базы.... но без регистрации никак что ли?
Неплохо было бы исправить это досадное недоразумение. Н-р, как в Yandex.
Название: Интересный запрос
Отправлено: AlieN от 19 Июля 2002, 13:15:18
Alexandr
Какое засорение поясни плз
Название: Интересный запрос
Отправлено: Alexandr от 19 Июля 2002, 13:31:34
[OFF]
Цитировать
Какое засорение поясни плз

Ну как какое. Вот только что я зарегился сыграл в игруху, но больше я в неё играть не буду. На х... я буду в базе болтаться?
Да и сложности какие. Я хочу заюзать игруху, а мне столько вписать надо. Вот если бы мне предложили вписать данные о себе после игры, мотивируя меня тем, что данные о моих "великолепных" результатах остануться моим правнукам, вот эт уже значительно лучше.
[/OFF]