簡體   English   中英

count()具有一對多關系和WHERE IN的分頁

[英]count() Pagination with one-to-many Relation and WHERE IN

主要問題是關系部分的“WHERE IN”,它將找到的行數相乘。
例如,我添加了GROUP_CONCAT以獲得更好的視圖:

SELECT COUNT(*),
GROUP_CONCAT(sections.name SEPARATOR '; ')
FROM users
LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
LEFT JOIN sections ON (users_sections.section_id = sections.id)
GROUP BY users.id

Finds:
'2', 'Registered; admins'
'3', 'Registered; admins; dudes'
'1', 'Registered'

有3行,這是正確的,但結果是沒用的。
現在添加WHERE IN部分:

SELECT COUNT(*),
GROUP_CONCAT(sections.name SEPARATOR '; ')
FROM users
LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
LEFT JOIN sections ON (users_sections.section_id = sections.id)
WHERE sections.id IN (2,3)
GROUP BY users.id

Finds:
'2', 'Registered; admins'
'2', 'Registered; admins'
'1', 'Registered'

即使是正確但無用的。 我需要一個單獨的'3'作為COUNT結果。
好吧,讓我們刪除GROUP_CONCAT並祈禱

SELECT COUNT(*)
FROM users
LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
LEFT JOIN sections ON (users_sections.section_id = sections.id)
WHERE sections.id IN (2,3)
GROUP BY users.id

Find:
'2'
'2'
'1'

和以前一樣。 讓我們試試這個:

SELECT COUNT(*) > 0
...

Find:
'1'
'1'
'1'

嘿,看起來不錯! 讓我們試試(希望最終):

SELECT SUM(COUNT(*) > 0)
...

Find:
Invalid use of group function

好難過...
我怎樣才能得到伯爵,或者這是不可能的?

您想要做什么(如果我正確讀取)是計算特定條件適用的不同用戶ID。 我無法從中得到真正的問題,但我認為你需要它:

SELECT 
    COUNT( DISTINCT users.id)
FROM
    users
    LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
    LEFT JOIN sections ON (users_sections.section_id = sections.id)
WHERE 
    sections.id IN (2,3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM