代码之家  ›  专栏  ›  技术社区  ›  jay

多个mysql查询与多个php foreach循环

  •  6
  • jay  · 技术社区  · 15 年前

    数据库结构:

    id  galleryId                 type     file_name       description
    1   `artists_2010-01-15_7c1ec`  `image`  `band602.jpg`   `Red Umbrella Promo`
    2   `artists_2010-01-15_7c1ec`  `image`  `nov7.jpg`      `CD Release Party`
    3   `artists_2010-01-15_7c1ec`  `video`  `band.flv`      `Presskit`
    

    我将为一个应用程序的一个部分提取图像,在另一个部分提取视频,等等。对每个部分进行多个MySQL查询是否更好,例如:

    $query = mysql_query("SELECT * FROM galleries WHERE galleryId='$galleryId' && type='image');
    

    …还是应该构建一个关联数组,并在需要使用结果集时反复循环数组?

    谢谢你的想法。

    4 回复  |  直到 15 年前
        1
  •  9
  •   Karl B    15 年前

    这取决于什么更重要:可读性或性能。我希望单个查询和预先填充的PHP数组执行起来更快,因为数据库连接很昂贵,但是每个部分的简单查询的可读性要高得多。

    除非你知道(而不仅仅是希望)你会有大量的流量,否则我会单独查询,然后担心优化是否会有问题。在这一点上,您还需要做其他事情,比如构建数据访问层和添加一些缓存。

        2
  •  2
  •   barrowc    15 年前

    如果“部分”是指用户可以查看的单独页面(单独的HTTP请求),我建议根据需要按类型进行查询。如果在只有图像数据集的页面上,您真的不需要获取视频数据集。您不会真正节省太多时间来获取所有内容,因为无论如何,每次点击页面都会连接到数据库(我假设如此)。

    如果“部分”是指一个页面的不同部分,那么立即获取所有内容。这将为您节省查询时间(仅一个查询)。

    但是,根据数据集的大小,您可能会在查询所有内容时遇到PHP的内存限制问题。然后,您可以尝试提高内存限制,但如果失败,您可能必须返回到每种类型的查询。

    使用按类型查询方法将一些计算负载转移到数据库服务器,因为您只需要请求并获取真正需要的内容。您不必编写代码来过滤和排序结果。过滤和排序是数据库通常比PHP代码更擅长的功能。如果可能的话,启用mysql的查询缓存,这将大大加快这些查询的速度,比用php编写任何查询都快。

        3
  •  1
  •   Hugh Bothwell    15 年前

    如果您的数据都来自一个表,那么我只做一个查询。

    我假定您正在构建一个单页,其中包含一个图片部分、一个视频部分、一个音乐部分等。编写查询返回结果,并按媒体类型排序-依次遍历所有图片、所有视频和所有音乐。

        4
  •  0
  •   gtd    15 年前

    最好有多个查询。每次运行查询时,所有数据都会被拉出并加载到内存中。如果您有5种不同的类型,这意味着该类型的每个页面所加载的数据是需要的5倍。

    即使一次只使用一个,如果您有100个以上的页面,或者一次可以在一个页面上合理显示多少个页面,那么您可能希望以相当快的速度开始使用限制/偏移查询分页。