避免MySQL查询吃掉不必要的带宽

时间:2016-03-05 00:15:36

标签: php mysql

我担心优化我的查询,只要在执行查询后从数据库发回的数据量。

假设我有两张桌子。一个名为 “艺术家” ,另一个名为 “专辑”

我们说“ 艺术家” 表格列为: 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

这个结果的问题在于它让我多次回到艺术家的名字,当我真的只需要它一次。我担心这种做事方式效率不高。特别是如果艺术家已经有很多专辑。我可能错了,如果我有,请有人纠正我。

无论如何,有没有更好的方法呢?我不需要多次检索艺术家姓名?

2 个答案:

答案 0 :(得分:0)

然后执行两个单独的请求。
首先请求艺术家姓名




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




然后是专辑标题..




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




我不知道有任何bandwith登录php,但你可以计算巫婆方式是使用 microtime()

&#xA执行最快的

答案 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相同......只是一个不同的语法。