Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите составить запрос
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010 Откуда: Реутов, Россия
Помог: 0 раз(а)
Приветствую!
Вот уже довольно долго бьюсь пытаюсь составить запрос. Не буду посвящать во все тонкости и постараюсь предельно упростить задачу.
Имеются 3 таблицы (для простоты). Одна пусть будет users с уникальным полем id. Две другие таблицы (назовём их A и B) содержат некоторое количество записей (каждая запись имеет столбец-связку id с первой таблицей).
Запросом нужно получить сумму сумм записей в таблицах A и B, домноженных на определённые коэффициенты, для каждого из пользователей в users.
Пример (указаны значения id для каждой из записей): users: 1 2 3 4 5 A: 1 1 2 4 4 4 (пусть для первой таблицы коэффициент 2) B: 1 3 3 3 (для второй коэффициент 3)
посчитаем для первого пользователя (2 записи в таблице А) * 2 + (1 запись в таблице В) * 3 = 7
результат для каждого пользователя: idsum
1 7
2 2
3 9
4 6
5 0
В первую очередь интересует решение без использования подзапросов (если таковое вооще существует). Заранее, спасибо.
SELECT count(a.*)AS count_a, count(b.*)AS count_b FROM a , b, users WHERE a.id = users.id AND b.id = users.id
Попробуйте такой запрос. Хотя я не уверен что будет работать но count_a и count_b должны содержать количесво для таблиц А и Б а их уже переменожать в php
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Реф
Отправлено: 27 Декабря, 2010 - 01:12:29
Частый гость
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010 Откуда: Реутов, Россия
Помог: 0 раз(а)
OrmaJever
Нужно получить количества для каждого id из users. А так мы получим только два числа не понятно для какого id. Добавление users.id и GROUP BY users.id также ничего хорошего не даст.
----- Думать надо головой, а не головкой!
OrmaJever
Отправлено: 27 Декабря, 2010 - 01:45:46
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
ага сам понял что чтото не так.
Реф пишет:
Нужно получить количества для каждого id из users.
это для всех пользователей одним запросом или только для одного?
SELECT count(a.id)AS count_a, count(b.id)AS count_b FROM a , b WHERE a.id = 1 AND b.id =1
вернёт для вышеописанного примера count_a = 2 и count_b = 2. Что не верно.
----- Думать надо головой, а не головкой!
OrmaJever
Отправлено: 27 Декабря, 2010 - 02:20:00
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Реф пишет:
вернёт для вышеописанного примера count_a = 2 и count_b = 2. Что не верно.
а если не id подщитывать? а все поля как я написал. (a.*)
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Реф
Отправлено: 27 Декабря, 2010 - 02:27:10
Частый гость
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010 Откуда: Реутов, Россия
Помог: 0 раз(а)
ругается и пишет:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS count_a, count(b.*) AS count_b FROM a , b WHERE a.id = 1 AND b.id = 1' at line 1
* имеет смысл не всех полей, а всех столбцов в таблице. Отсюда и ошибка.
----- Думать надо головой, а не головкой!
OrmaJever
Отправлено: 27 Декабря, 2010 - 02:29:06
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Реф пишет:
'*)
оу может вот так a.count(id). Мелкий бы разрулил ситуацию)
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Реф
Отправлено: 27 Декабря, 2010 - 02:38:33
Частый гость
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010 Откуда: Реутов, Россия
Помог: 0 раз(а)
Ждём мелкого.
----- Думать надо головой, а не головкой!
OrmaJever
Отправлено: 27 Декабря, 2010 - 02:40:39
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Всё я спать. Но мне кажется что первый запрос какраз и вытянет всё.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.