2015-07-21 2 views
2

У меня есть две таблицы:SQL Упорядочение Результаты других запросов

`users` 
`id` INT(11) 
`name` VARCHAR(30) 

`items` 
`id` INT(11) 
`name` VARCHAR(30) 
`owner` VARCHAR(30) 

А вот моя проблема: я пытаюсь заказать users таблицу по количеству уникальных предметов, которые они имеют в items таблице.

Чтобы получить уникальный номер пунктов:

SELECT * FROM `items` WHERE `owner`='".$ownername."' GROUP BY `name` 

Выполнение этого запроса дает мне количество уникальных предметов для некоторых $ownername.

То, что я пытаюсь сделать, это заказать таблицу users по количеству уникальных элементов, которые они имеют в таблице items, и я не уверен, как это сделать.

+0

'ORDER BY COUNT (DISTINCT items.ID) DESC' –

+0

Извините, я просто выбрал все предложенные теги. Это mySQL. – BryanLavinParmenter

ответ

2

Вы можете присоединиться, группы и упорядочить по количеству:

SELECT u.name 
FROM users u 
JOIN items i 
WHERE u.owner='".$ownername."' 
GROUP BY u.name 
ORDER BY COUNT(i.id) DESC 

Или вы можете сортировать результат подвыборки, который подсчитывает элементы для каждого пользователя:

SELECT u.name 
FROM users u 
WHERE u.owner='".$ownername."' 
ORDER BY 
    (SELECT COUNT(*) FROM items i WHERE i.owner = u.name) DESC 

Последняя вы также можете написать несколько иначе, если вы хотите также показать это значение:

SELECT u.name, 
     (SELECT COUNT(*) FROM items i WHERE i.owner = u.name) as item_count 
FROM users u 
WHERE u.owner='".$ownername."' 
ORDER BY 
    item_count DESC 
+0

Я использовал последнее решение, и оно отлично работало. Спасибо. – BryanLavinParmenter

0

Я использовал left join, чтобы пользователи с отсутствующими товарами также отображались.

select u.name , count(distinct i.name) as NumberOfItems 
FROM users u 
LEFT JOIN items i 
on u.name = i.owner 
order by count(distinct i.name) desc 
Смежные вопросы