我有一个表posts
,它与多个表(files
和categories
在下面的完全简化示例中具有一对多关系)。 posts
还有许多为每行返回的字段。
如果我返回1000行posts
并且每个帖子有4个files
和3个类别,我将在结果集中获得12000条记录(复制帖子信息以便为我提供文件信息)。随着每一对多关系的增长和发展。
下面显示了我当前JOIN的过度简化版本以及预期的Group_Concat()版本。 Group_Concat方法可以极大地简化php处理。
评论这两种方法的表现?
更新我意识到我对JOIN方法的主要关注不是php代码,而是处理更大的结果集所消耗的服务器内存(& cpu资源?)。由于我有一个text
类型的字段,因此每行都有大量数据。
使用联接
SELECT p.postid, title, fileid, filename, category
FROM posts p
LEFT JOIN files f ON f.postid = p.postid
LEFT JOIN categories c ON c.postid = p.postid
使用Group_Concat()
select p.postid, title, (
SELECT group_concat(
concat_ws(",", fileid, filename)
SEPARATOR ';')
FROM files f WHERE f.postid = p.postid
) as fileinfo
SELECT group_concat(category)
FROM categories WHERE cat.postid = p.postid
) as catinfo
FROM posts p