Задавайте вопросы, мы ответим
Вы не зашли.
есть 2 запроса
SELECT users.id, SUM(objects.rating_2) as romantic
FROM users, stars, objects
WHERE stars.presenter_id = users.id
AND objects.id = stars.obj_id
and stars.user_id!=users.id
group by users.id
SELECT users.id, SUM(objects.rating_1) as charm
FROM users, stars, objects
WHERE stars.user_id = users.id
AND objects.id = stars.obj_id
and stars.presenter_id!=users.id
group by users.id
запросы из одних и тех же таблиц, но разные условия. надо их объединить чтоб получилось
id | romantic | charm
v. val val
+ ко всему должны присутствовать все пользователи, даже если у них сумма рейтингов NULL. дамп таблицы прилагаю
Неактивен
SELECT a.id, romantic, charm
FROM (первый запрос) a
JOIN (второй запрос) b USING (id)
Неактивен
Голова однако!
Неактивен
запрос
SELECT a.id, romantic, charm
FROM (
SELECT users.id, SUM( objects.rating_2 ) AS romantic
FROM users, stars, objects
WHERE stars.presenter_id = users.id
AND objects.id = stars.obj_id
AND stars.user_id != users.id
GROUP BY users.id
)a
JOIN (
SELECT users.id, SUM( objects.rating_1 ) AS charm
FROM users, stars, objects
WHERE stars.user_id = users.id
AND objects.id = stars.obj_id
AND stars.presenter_id != users.id
GROUP BY users.id
)b
USING ( id )
ничего не возвращает... помогите пож. я join'ами ещё не пользовался никогда))
Отредактированно vfz4z (17.12.2009 18:30:50)
Неактивен
Может, ошибку какую пишет?
Неактивен
нет, запрос выполняет без ошибок. немного изменил значения в таблице stars, теперь результат есть. но работает всё немного неправильно.
id romantic charm
1 val val
а неправильно работает судя по всему из=за того, что val=NULL не возвращиется в результате выполнения запроса. как надо изменить select'ы?
Неактивен
цель запросов получить для каждого id из таблицы users 2 вот этих поля. А если одно их полей у пользователя =0 то строка не выводится, хотя 2 может и быть !=0
Неактивен
Ну, тогда
SELECT u.id, (SELECT SUM( objects.rating_2 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id) romantic, (...)
FROM users u;
Неактивен
в итоге получилось
SELECT u.id, (
SELECT SUM( objects.rating_2 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id
) AS romantic, (
SELECT SUM( objects.rating_1 )
FROM stars, objects
WHERE stars.user_id = u.id
AND objects.id = stars.obj_id
AND stars.presenter_id != u.id
) AS charm
FROM users u
работает отлично. paulus, огромное спасибо!!!
Неактивен
а если немного усложнить задачу и 4 столбец должен быть суммой 2 и 3?
Неактивен
SELECT u.id, (SELECT ifnull( SUM( objects.rating_2 ) , 0 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id
) AS romantic, (SELECT ifnull( SUM( objects.rating_1 ) , 0 )
FROM stars, objects
WHERE stars.user_id = u.id
AND objects.id = stars.obj_id
AND stars.presenter_id != u.id
) AS charm, (SELECT ifnull( SUM( objects.rating_2 ) , 0 )
FROM stars, objects
WHERE stars.presenter_id = u.id
AND objects.id = stars.obj_id
AND stars.user_id != u.id
) + (SELECT ifnull( SUM( objects.rating_1 ) , 0 )
FROM stars, objects
WHERE stars.user_id = u.id
AND objects.id = stars.obj_id
AND stars.presenter_id != u.id
) as rate
FROM users u понятно что работает, но однако это не самое изящное решение...
Неактивен