2013-03-25 3 views
0

предполагающих у нас есть таблица пользователей, как это:Заказать SQL результатов, используя значение Count() из другой таблицы

ID | USERNAME | STATUS | 
01 | Aname  | 1  | 
02 | Bname  | 1  | 
03 | Cname  | 2  | 
04 | Dname  | 1  | 

есть также две другие таблицы, где для каждого пользователя, записывают элементы, которые пользователи «есть», для примера, видео и фотографий, позволяет предположить, видео таблица выглядит так:

ID | USER  | VIDEO | 
01 | 01  | aaaa | 
02 | 01  | bbbb | 
03 | 02  | cccc | 
04 | 02  | dddd | 
05 | 03  | eeee | 
06 | 03  | ffff | 
07 | 03  | gggg | 

то же самое для фотографий:

ID | USER  | PHOTO | 
01 | 01  | aaaa | 
02 | 02  | cccc | 
03 | 02  | dddd | 
04 | 03  | eeee | 
05 | 03  | ffff | 
06 | 03  | gggg | 

сейчас, я пытаюсь заказать результаты первой таблицы в поле STATUS, поэтому пользователи со статусом 2 будут идти в конце (или начале) результатов, но я хотел бы заказать остальные факт, что у них есть или нет видео или фотографий. Фактически для всех пользователей в статусе 1 я проверяю, есть ли у них видео И фотографии и отображает сообщение типа «предупреждение, у вас нет видео» или что-то в этом роде, я также хотел бы заказать всех пользователей на основе статуса и по факту что у них есть или нет фото или видео ... что-то вроде:

SELECT id,username,status,NumOfPhotos,NumOfVideos order by status ASC, numOfPhotos ASC, NumOfVideos DESC 

где NumOfPhotos, например, является SELECT COUNT(*) FROM PHOTOS WHERE USER = USERS.ID

возможно ли это? возможно ли это в одном заявлении?

ответ

2

Это пример на SQL Server, но что-то подобное должно хорошо работать на другом RDBMS

SELECT 
id, username, status, COALESCE(NumOfPhotos,0) AS NumOfPhotos,COALESCE(NumOfVideos,0) AS NumOfVideos 
FROM dbo.Users u 
LEFT JOIN (SELECT [USER], COUNT(*) AS NumOfPhotos FROM dbo.Photos GROUP BY [USER]) ph ON ph.[USER] = u.ID 
LEFT JOIN (SELECT [USER], COUNT(*) AS NumOfVideos FROM dbo.Videos GROUP BY [USER]) vd ON vd.[USER] = u.ID 
ORDER BY status ASC, numOfPhotos ASC, NumOfVideos DESC 

SQLFiddle

Смежные вопросы