[英]MySQL, SELECT with COUNT, but GROUP BY if sort
我有兩個像這樣的表:
表“用戶”:
user_id | source
----------------
1 | 2
2 | 2
3 | 3
4 | 0
表“來源”:
source_id | name
----------------
1 | "one"
2 | "two"
3 | "three"
4 | "four"
現在,我需要從source
選擇(*)並另外擁有具有此源的COUNT個“用戶”,但是如果有其他過濾器(PHP mysqli的請求),則需要按其用戶數對“源”表進行排序。
這樣做的最佳方法是什么,有可能一言一行嗎?
--------------增加了編輯----------
第一部分(從另一個表計數的SELECT)我是這樣做的:
SELECT
id, name
(select count(*) from users where source = sources.id) as sourceUsersCount
FROM sources
現在,如何按每個來源中的用戶數量來訂購此列表?
如果需要的話,請檢查以下查詢。
select s.*,a.c from sources s
left join
(select count(*) as c,source as src
from user u join sources s
on s.source_id = u.source group by u.source) a
on s.source_id = a.src;
計算用戶數:
SELECT sources.*, COUNT(users.user_id) FROM sources
LEFT JOIN users ON users.source_id = sources.source_id
GROUP BY sources.source_id;
我認為通過過濾器意味着WHERE
子句:
SELECT sources.*, COUNT(users.user_id) FROM sources
LEFT JOIN users ON users.source_id = sources.source_id
WHERE sources.source_id = 2
GROUP BY sources.source_id;
而且,您始終可以在最后附加一個ORDER BY
進行排序:
SELECT sources.*, COUNT(users.user_id) FROM sources
LEFT JOIN users ON users.source_id = sources.source_id
GROUP BY sources.source_id
ORDER BY sources.source_id DESC;
通過實現以下目標:
SELECT
sources.*,
count(users.source) as sourceUsersCount
FROM sources
LEFT JOIN users ON sources.id = users.source
//In case of additional filters
WHERE
id != 0 AND (name LIKE %?% OR id LIKE %?%)
//\\
GROUP BY sources.id
//In case of sorting by "users" count
ORDER BY sourceUsersCount ASC
//\\
這是最好的方法,還是有一些更快的變體?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.