看来我没有得到它.请考虑此查询
SELECT COUNT(*) AS `numrows`
FROM (`exp_channel_titles` ch)
JOIN `exp_channel_data` cd ON `cd`.`entry_id`=`ch`.`entry_id`
LEFT JOIN `exp_matrix_data` md ON `md`.`entry_id`=`ch`.`entry_id` and field_id = 14
LEFT JOIN `exp_assessment_users` au ON `au`.`entry_id`=`ch`.`entry_id`
WHERE ch.channel_id = 4 GROUP BY `ch`.`entry_id`
Run Code Online (Sandbox Code Playgroud)
它返回 2
但如果我改成它
SELECT *
FROM (`exp_channel_titles` ch)
JOIN `exp_channel_data` cd ON `cd`.`entry_id`=`ch`.`entry_id`
LEFT JOIN `exp_matrix_data` md ON `md`.`entry_id`=`ch`.`entry_id` and field_id = 14
LEFT JOIN `exp_assessment_users` au ON `au`.`entry_id`=`ch`.`entry_id`
WHERE ch.channel_id = 4 GROUP BY `ch`.`entry_id`
Run Code Online (Sandbox Code Playgroud)
结果只有1行.怎么会这样?
您正在进行分组,这意味着内部匹配的行将折叠为单个实体.例如,考虑这样的假表:
field
-----
a
a
Run Code Online (Sandbox Code Playgroud)
是的,一个字段表,有两个记录,两个记录都有值a.
SELECT *
FROM table
GROUP BY field
Run Code Online (Sandbox Code Playgroud)
group by将找到具有相同值的所有字段,并将它们折叠为SINGLE记录,这样您的两条记录a就会在结果集中成为一行,并最终得到
field
-----
a
Run Code Online (Sandbox Code Playgroud)
但是这样做
SELECT count(*)
FROM table
GROUP BY field
Run Code Online (Sandbox Code Playgroud)
改变一切.现在,DB将逐字计算将多少记录折叠到结果集的单行中.因此,您仍然在结果集中获得SINGLE行,其中包含由以下各项折叠的行数group by:
count(*)
--------
2
Run Code Online (Sandbox Code Playgroud)
一行,值为2,因为有两行a.
现在,如果你有一个包含更多记录的表:
field
-----
a
a
b
c
c
c
Run Code Online (Sandbox Code Playgroud)
你会得到:
SELECT * ... GROUP BY field
field
-----
a
b
c
SELECT count(*), field ... GROUP BY field
count(*) field
----------------
2 a
1 b
3 c
Run Code Online (Sandbox Code Playgroud)
再次,3行结果,但请注意计数如何表示原始表中每个分组字段的数量.