PDA

Просмотр полной версии : Помогите с Sql запросом


andrey_a87
16.05.2008, 09:16
SELECT DISTINCT
users.UserLogin,
users.UserPassword,
ppersons.Surname,
ppersons.Name,
ppersons.Fathername,
ppersons.RoadName,
stat_tests.TestID,
courses.HourWeight
FROM
users
INNER JOIN ppersons ON (users.UserLink = ppersons.PPersonID)
INNER JOIN stat_tests ON (users.UserID = stat_tests.UserID)
INNER JOIN courses ON (stat_tests.TestID = courses.CourseID)
WHERE
(stat_tests.StatTestResult >= '0,75')



Есть запрос,он выводит результаты следующим образом
UserLogin UserPassword Surname Name Fathername RoadName TestID HourWeight
administrator 101 Владимирович Сергей Егоров Главная дорога 220 9
administrator 101 Владимирович Сергей Егоров Главная дорога 213 9
administrator 101 Владимирович Сергей Егоров Главная дорога 215 9
administrator 101 Владимирович Сергей Егоров Главная дорога 214 9
administrator 101 Владимирович Сергей Егоров Главная дорога 212 9
administrator 101 Владимирович Сергей Егоров Главная дорога 211 9
administrator 101 Владимирович Сергей Егоров Главная дорога 210 9
administrator 101 Владимирович Сергей Егоров Главная дорога 219 9
USER10 OPAP5N Евгеньевна Галина Мунц КуйбРЦБ 213 9
USER10 OPAP5N Евгеньевна Галина Мунц КуйбРЦБ 211 9
USER10 OPAP5N Евгеньевна Галина Мунц КуйбРЦБ 210 9
USER10 OPAP5N Евгеньевна Галина Мунц КуйбРЦБ 220 9

хотелось бы чтобы он подсчитывал кол-во записей в таблице HourWeight, но если я делаю sum(HourWeight) а потом group by userlogin то он бред выводит...(не правдивые данные)

Isis
16.05.2008, 09:27
$res = mysql_query("SELECT `courses.HourWeight` FROM `users`");
$row = mysql_num_rows($res);
echo $row

andrey_a87
16.05.2008, 09:30
Вы меня не поняли по средством SQL...хочу чтобы получился ответ

administrator 101 Владимирович Сергей Егоров Главная дорога 72 (т.к. 9*8)
USER10 OPAP5N Евгеньевна Галина Мунц КуйбРЦБ 36 (т.к. 9*4)


а TESTID(наверху) выводится для уникальности записей...

VDShark
16.05.2008, 09:51
но если я делаю sum(HourWeight) а потом group by userlogin то он бред выводит...(не правдивые данные)

Конечно (он у вас вообще что то выводит?=/ ), потому что в данном случае группировку необходимо провести по всем идентичным полям.

andrey_a87
16.05.2008, 09:55
как это можно ещё изобразить? ГОРЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ ЮЮЮЮЮЮ

VDShark
16.05.2008, 09:57
как это можно ещё изобразить? ГОРЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ ЮЮЮЮЮЮ
Всмысле изобразить?

Если хочешь с группировкой - вот (по понятным причинам не тестировалось)

SELECT DISTINCT
users.UserLogin,
users.UserPassword,
ppersons.Surname,
ppersons.Name,
ppersons.Fathername,
ppersons.RoadName,
sum(courses.HourWeight)
FROM
users
INNER JOIN ppersons ON (users.UserLink = ppersons.PPersonID)
INNER JOIN stat_tests ON (users.UserID = stat_tests.UserID)
INNER JOIN courses ON (stat_tests.TestID = courses.CourseID)
WHERE
(stat_tests.StatTestResult >= '0,75')
GROUP BY UserLogin, UserPassword, Surname, Name, Fathername, RoadName

andrey_a87
16.05.2008, 10:11
Но в таком случае он считает сумму криво. При условии того, что:

administrator 101 Владимирович Сергей Егоров Главная дорога 220 9
administrator 101 Владимирович Сергей Егоров Главная дорога 213 9
administrator 101 Владимирович Сергей Егоров Главная дорога 215 9
administrator 101 Владимирович Сергей Егоров Главная дорога 214 9
administrator 101 Владимирович Сергей Егоров Главная дорога 212 9
administrator 101 Владимирович Сергей Егоров Главная дорога 211 9
administrator 101 Владимирович Сергей Егоров Главная дорога 210 9
administrator 101 Владимирович Сергей Егоров Главная дорога 219 9

9*8=72, он выводит число больше 1000000 ;)

VDShark
16.05.2008, 10:22
Тогда скинь что ли структуру участвующих табличек... а то так с утра фантазия плохо работает)