每个子查询中的Mysql限制

时间:2014-09-01 16:23:30

标签: mysql sql

我有一个包含类别的表

Categories
id | title | visible
1  |  one  |    1
2  |  two  |  null
3  | three |    1

包含上述类别照片的表格

Photos
id | category_id |     title      | visible
1  |      1      |  photo.one     |    1
2  |      1      |  photo.two     |  null
3  |      1      |  photo.three   |    1
4  |      1      |  photo.four    |    1
5  |      2      |  photo.five    |  null
6  |      2      |  photo.six     |    1
7  |      3      |  photo.seven   |    1
8  |      3      |  photo.eight   |    1
9  |      3      |  photo.nine    |    1

我需要只拍两张照片,每张照片都有photo.visible = 1,其中category.visible = 1。

我试过限制,但我只能限制所有记录,而不是每个类别。

结果必须是

Result
id | category_id |     title      | visible | category_title
1  |      1      |  photo.one     |    1    |      one
2  |      1      |  photo.three   |    1    |      one
3  |      3      |  photo.seven   |    1    |     three
4  |      3      |  photo.eight   |    1    |     three

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果你只需要2张照片就可以实现这一目标,但解决方案会为每个类别提供一行,两张照片名称为逗号分隔列表,如果这对你来说足够好,那么你可以使用{{ 3}}将所有照片以逗号分隔列表的每个类别和substring_index获取,以便从group_concat函数的结果中获取2张照片

select c.*,
substring_index(group_concat(p.title),',',2) photos
from Categories c
join Photos p on (c.id = p.category_id and p.`visible` = 1)
where c.`visible` is not null
group by c.id

结果集将类似于

ID  TITLE   VISIBLE PHOTOS
1   one     1       photo.one,photo.three
3   three   1       photo.eight,photo.nine

group_concat


  

根据文档结果被截断为最大长度   由group_concat_max_len系统变量给出,该变量有一个   默认值为1024.虽然可以设置更高的值   返回值的有效最大长度受到约束   max_allowed_pa​​cket的值。