我担心优化我的查询,只要在执行查询后从数据库发回的数据量。
假设我有两张桌子。一个名为 “艺术家” ,另一个名为 “专辑” 。
我们说“ 艺术家” 表格列为: ID 和名称
而 “相册” 表格列为: id , artist_id ,标题
假设我想要一个页面将艺术家的名字作为标题。然后在下面,我想显示艺术家专辑的列表。
我可以通过以下方式轻松完成这项工作:
SELECT artists.name AS artist_name, albums.title AS album_title
LEFT JOIN albums
ON albums.artist_id = artists.id
WHERE artists.id = 3;
这会给我一个看起来像这样的结果:
artist_name | album_title
|
Justin Bieber | My First Crappy Album
Justin Bieber | Another Crappy Album
Justin Bieber | Yet Another Crappy Album
这个结果的问题在于它让我多次回到艺术家的名字,当我真的只需要它一次。我担心这种做事方式效率不高。特别是如果艺术家已经有很多专辑。我可能错了,如果我有,请有人纠正我。
无论如何,有没有更好的方法呢?我不需要多次检索艺术家姓名?
答案 0 :(得分:0)
然后执行两个单独的请求。
首先请求艺术家姓名


 SELECT name
 FROM artists
 WHERE id = 3& #xA;


 然后是专辑标题..


 SELECT title&#xA ; FROM专辑
 WHERE artist_id = 3



 我不知道有任何bandwith登录php,但你可以计算巫婆方式是使用 microtime()
答案 1 :(得分:0)
您可以使用聚合函数。
SELECT ar.name AS artist_name, GROUP_CONCAT(al.title) AS album_titles
FROM artists ar, albums al
WHERE ar.id = al.artist_id
AND ar.id = 3
GROUP BY artist_name;
这应该给你类似的东西:
artist_name | album_titles
Justin Bieber | Album1, Album2, Album3
我暂时没有使用过此命令,但您可以在此处找到更多相关文档:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
另外,我更喜欢在FROM子句中列出我的表并使用WHERE子句来连接它们,但它与上面的JOIN相同......只是一个不同的语法。