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
Форумы портала PHP.SU :: Версия для печати :: Помогите составить запрос
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Помогите составить запрос

Страниц (1): [1]
 

1. Реф - 27 Декабря, 2010 - 00:32:57 - перейти к сообщению
Приветствую!

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

Имеются 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

результат для каждого пользователя:
id sum
1 7
2 2
3 9
4 6
5 0

В первую очередь интересует решение без использования подзапросов (если таковое вооще существует). Заранее, спасибо.
2. OrmaJever - 27 Декабря, 2010 - 00:58:21 - перейти к сообщению
Математические действия в любом случае лутше проводить в php.
CODE (SQL):
скопировать код в буфер обмена
  1. 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. Реф - 27 Декабря, 2010 - 01:12:29 - перейти к сообщению
OrmaJever
Нужно получить количества для каждого id из users. А так мы получим только два числа не понятно для какого id. Добавление users.id и GROUP BY users.id также ничего хорошего не даст.
4. OrmaJever - 27 Декабря, 2010 - 01:45:46 - перейти к сообщению
ага сам понял что чтото не так.
Реф пишет:
Нужно получить количества для каждого id из users.

это для всех пользователей одним запросом или только для одного?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(a.*) AS count_a, count(b.*) AS count_b FROM a , b WHERE a.id = $id AND b.id = $id

ну вот для одного должно работать.
5. Реф - 27 Декабря, 2010 - 02:16:52 - перейти к сообщению
OrmaJever пишет:
это для всех пользователей одним запросом или только для одного?

для всех, включая тех кто ни разу не попал в A и B, но есть в users.

OrmaJever пишет:
ну вот для одного должно работать.

Для одного тоже не сработает.
CODE (SQL):
скопировать код в буфер обмена
  1. 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. Что не верно.
6. OrmaJever - 27 Декабря, 2010 - 02:20:00 - перейти к сообщению
Реф пишет:
вернёт для вышеописанного примера count_a = 2 и count_b = 2. Что не верно.

а если не id подщитывать? а все поля как я написал. (a.*)
7. Реф - 27 Декабря, 2010 - 02:27:10 - перейти к сообщению
ругается и пишет:
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

* имеет смысл не всех полей, а всех столбцов в таблице. Отсюда и ошибка.
8. OrmaJever - 27 Декабря, 2010 - 02:29:06 - перейти к сообщению
Реф пишет:
'*)

оу может вот так a.count(id). Мелкий бы разрулил ситуацию)
9. Реф - 27 Декабря, 2010 - 02:38:33 - перейти к сообщению
Радость
Ждём мелкого.
10. OrmaJever - 27 Декабря, 2010 - 02:40:39 - перейти к сообщению
Всё я спать. Но мне кажется что первый запрос какраз и вытянет всё.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT a.count(*) AS count_a, b.count(*) AS count_b FROM a , b, users WHERE a.id = users.id AND b.id = users.id

Посмотрим что напишет мелкий
11. Мелкий - 27 Декабря, 2010 - 10:08:52 - перейти к сообщению
Да ну вас, такие задачки с утра пораньше Хм
Ничего лучше пары подзапросов не придумывается...

 

Powered by ExBB FM 1.0 RC1