Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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
В общем суть: надо узнать самое быстрое прохождение пользователя в по всем четырем гонкам
Как написать - хз
-
Попробуй:
select userid, race1, race2, race3, race4, (race1+race2+race3+race4) as total, day from gamerating group by userid having min(total)
-
ThE0ReTiC
Ответ MySQL:
Unknown column \'total\' in \'having clause\'
-
Мoжет я не понял вопрос, но
SELECT userid, race1, race2, race3, race4,
(race1+race2+race3+race4) AS total, day
FROM gamerating
ORDER BY total DESC LIMIT 1;
возможно(должно) подойдет.
-
Serchey
я не понял вопрос
- Да не понял(зачем не тогда группировка?)
Прочитай внимательно мой первый пост
-
select min(race1+race2+race3+race4) as total, userid, day from gamerating group by userid, day - мин время по дням
-
select min(race1+race2+race3+race4) as total, userid, day from gamerating group by userid - минимальное время за все попытки
-
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
-
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
вывод --------- видимо, (ИМХО) надо делать временную таблицу
-
MS access не хавает
select min(race1+race2+race3+race4) as total, userid, day, race1, race2, race3, race4 from gamerating group by userid
пишет
Попытка выполнить запрос, который не включает указанное выражение как часть статистической функции или группы. (Ошибка 3122)
-
Верняк, без временной таблици не обойтись!
-
Напишите плиз как для чайника как это сделать :)
-
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;
-
Я бы сделал это так:
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;
-
Alexandr
Serchey
чёй- то я ваши конструкции нефига не понял.
Serchey в том виде в каком написано оно не может работать.
Что-то в этом мире не так... Надо жрецов спросить. Может они помогут. Я лично нефига из временой таблицы не высосал -> ошибки при группировке
-
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! ---??????
-
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.
А эт я тя когда вылезает?
-
Alexandr
feature if the columns you omit from the GROUP BY
это из мана по майсклю.
а касательно твоего кода... ты его пробывал?
-
а касательно твоего кода... ты его пробывал?
Конкретно этот нет. А вообще есть у мя подобный.
ЗЫ Ща заюзаю, что бы не сомневался....
-
ROUND((race1+race2+race3+race4), 5)=ROUND($total, 5);
мне кажется, здеся на вилы можно наткнуться и........ нафига круглить. Пока десять строчек и нет рядом стоящих результов у каждого гонщика ничего, а если что-нибудь типа 378.04969 378.04999.....
-
Вообщем вот код: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|
нафига круглить
Мы что с тобой в космос отправляемся? :-)
-
Ты чувствуешь этот запах сынок....запах напалма --- так пахнет победа!!!
-
Alexandr
Ну что я могу сказать: спасибаЧЧки чел
-
теперь можно посмотреть результат
http://game.msport.ru
-
2AlieN хотел было сыграть без засорения базы.... но без регистрации никак что ли?
Неплохо было бы исправить это досадное недоразумение. Н-р, как в Yandex.
-
Alexandr
Какое засорение поясни плз
-
[OFF]
Какое засорение поясни плз
Ну как какое. Вот только что я зарегился сыграл в игруху, но больше я в неё играть не буду. На х... я буду в базе болтаться?
Да и сложности какие. Я хочу заюзать игруху, а мне столько вписать надо. Вот если бы мне предложили вписать данные о себе после игры, мотивируя меня тем, что данные о моих "великолепных" результатах остануться моим правнукам, вот эт уже значительно лучше.
[/OFF]