Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос на выборку данных из двух таблиц
 
 автор: name   (02.10.2006 в 20:33)   письмо автору
 
 

Здравствуйте.
Подскажите, как составить запрос: есть две таблицы -

1.             2.
Users     Orders
---------     -----------
id             id
name      users_id
                amount


с такими данными:

Users              Orders
---------             -----------
1                        1
Вася                 1
---------              300.00
2                       -----------
Петя и т. д.      2
                           2
                           450.00
                          ----------
                           3
                           2
                           1000.00 и т. д


Нужно выводить отсортированный список пользователей по кол-ву совершенных покупок.

Петя
Вася
и т. д.

   
 
 автор: cheops   (03.10.2006 в 00:47)   письмо автору
 
   для: name   (02.10.2006 в 20:33)
 

Можно поступить следующим образом
SELECT Users.name, COUNT(Orders.id) AS cnt
FROM Users LEFT JOIN Orders
ON Users.id = Orders.users_id
GROUP BY Users.id
ORDER BY cnt DESC

   
 
 автор: name   (03.10.2006 в 15:45)   письмо автору
 
   для: cheops   (03.10.2006 в 00:47)
 

Спасибо!
А вы не могли бы объяснить принцип работы данного запроса?

   
 
 автор: cheops   (03.10.2006 в 16:25)   письмо автору
 
   для: cheops   (03.10.2006 в 00:47)
 

Мы извлекаем данные из таблиц Users и Orders (FROM Users LEFT JOIN Orders) при условии равенства Users.id = Orders.users_id. LEFT JOIN требует выводить все значения Users, даже если клиент не совершал ещё ни одной покупки и условие Users.id = Orders.users_id для него выполняться не может. Конструкция GROUP BY Users.id группирует данные по полю Users.id, это означает, что в результирующей таблице будет ровно столько записей, сколько уникальных значений поля id в таблице Users, а функция COUNT() будет подсчитывать поличество полей Orders.id, которые принадлежат Users.id. Для удобства, конструкции COUNT(Orders.id) мы назначаем псевдоним cnt при помощи оператора AS. Теперь мы можем обращаться к результату возвращаемому функцией по имени cnt. Так, конструкция ORDER BY cnt DESC сортрирует в обратном порядке результат выборке по этому полю.

   
 
 автор: name   (03.10.2006 в 16:59)   письмо автору
 
   для: cheops   (03.10.2006 в 16:25)
 

БОЛЬШОЕ СПАСИБО!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования