Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php count()使用一对多关系分页,其中_Php_Mysql_Join_Orm_Pagination - Fatal编程技术网

Php count()使用一对多关系分页,其中

Php count()使用一对多关系分页,其中,php,mysql,join,orm,pagination,Php,Mysql,Join,Orm,Pagination,主要问题是关系部分上的“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_

主要问题是关系部分上的“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”作为计数结果。
好吧,那么,让我们把这群人移除,然后…祈祷

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'
嘿,看起来不错!让我们尝试一下(希望最终):

真伤心…
我怎样才能得到这方面的计数,或者这是不可能的?

您想要做的(如果我读得正确的话)是在特定条件适用的情况下计算不同的用户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)
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)