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 :: Версия для печати :: Выборка данных из 2 таблиц с разными полями + группировка
Форумы портала PHP.SU » » Работа с СУБД » Выборка данных из 2 таблиц с разными полями + группировка

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

1. lawer85 - 20 Ноября, 2015 - 21:36:31 - перейти к сообщению
Есть 2 таблицы. Из одной надо выбрать сумму числовых данных с одинаковым id а с другой имя и фамилию. Нужно получить все это в одном результате запроса.

По частям выглядит это так

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT SUM(duration) FROM activities GROUP BY contact_id


CODE (SQL):
скопировать код в буфер обмена
  1. SELECT first_name, last_name FROM contacts
2. Мелкий - 20 Ноября, 2015 - 21:40:00 - перейти к сообщению
Вообще всех?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT first_name, last_name FROM contacts JOIN (SELECT contact_id, SUM(duration) FROM activities GROUP BY contact_id) act ON  contact_id = contacts.id
3. vintag - 20 Ноября, 2015 - 22:12:39 - перейти к сообщению
lawer85 пишет:
Есть 2 таблицы. Из одной надо выбрать сумму числовых данных с одинаковым id а с другой имя и фамилию. Нужно получить все это в одном результате запроса.

По частям выглядит это так

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT SUM(duration) FROM activities GROUP BY contact_id


CODE (SQL):
скопировать код в буфер обмена
  1. SELECT first_name, last_name FROM contacts


SELECT activities.SUM(duration), contacts.first_name, contacts.last_name FROM
contacts, activities WHERE activities.[поле таб. activities первичного, общего ключа для обоих таблиц]=contacts.[тоже самое поле но уже второй таблицы];
(Добавление)
если всех то так:
SELECT activities.*, contacts.* FROM
contacts, activities WHERE activities.[поле таб. activities первичного, общего ключа для обоих таблиц]=contacts.[тоже самое поле но уже второй таблицы];
4. lawer85 - 20 Ноября, 2015 - 23:15:19 - перейти к сообщению
Мелкий пишет:
Вообще всех?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT first_name, last_name FROM contacts JOIN (SELECT contact_id, SUM(duration) FROM activities GROUP BY contact_id) act ON  contact_id = contacts.id


При такой выборке я получаю только лишь данные first_name, last_name а мне надо чтобы к этим данным я еще получал duration
(Добавление)
смысл в чем из одной таблицы я суммирую все значения поля duration с одним и тем же contact_id для этого и пишу GROUP BY contact_id, а из другой таблицы мне надо получить имя и фамилию.

Кстати поле id таблицы с именами и фамилиями = contact_id
5. Мелкий - 21 Ноября, 2015 - 00:34:26 - перейти к сообщению
увлёкся копипастом, забыл поле вписать новое
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT first_name, last_name, duration_sum FROM contacts JOIN (SELECT contact_id, SUM(duration) AS duration_sum FROM activities GROUP BY contact_id) act ON  contact_id = contacts.id
6. lawer85 - 21 Ноября, 2015 - 00:46:16 - перейти к сообщению
Мелкий пишет:
увлёкся копипастом, забыл поле вписать новое
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT first_name, last_name, duration_sum FROM contacts JOIN (SELECT contact_id, SUM(duration) AS duration_sum FROM activities GROUP BY contact_id) act ON  contact_id = contacts.id


Теперь все ок спасибо!

Только можете указать где почитать про конструкцию с использованием слова act перед ON?
7. Мелкий - 21 Ноября, 2015 - 01:21:12 - перейти к сообщению
act - просто имя, может быть любым.
Читать надо про подзапросы. Вот официальная документация: http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]/subqueries[dot]html
8. lawer85 - 21 Ноября, 2015 - 02:17:20 - перейти к сообщению
Мелкий пишет:
act - просто имя, может быть любым.
Читать надо про подзапросы. Вот официальная документация: http://dev.mysql.com/doc/refman/5.7/en/subqueries.html


Имя чего?
9. Мелкий - 21 Ноября, 2015 - 11:06:45 - перейти к сообщению
Имя результата подзапроса. Подзапрос здесь выступает в качестве таблицы, а у каждой таблицы должно быть имя.
10. lawer85 - 21 Ноября, 2015 - 22:45:26 - перейти к сообщению
Мелкий пишет:
Имя результата подзапроса. Подзапрос здесь выступает в качестве таблицы, а у каждой таблицы должно быть имя.


Прям пребольшое спасибо за объяснение! Столько ньюансов. Буду знать!

 

Powered by ExBB FM 1.0 RC1