【问题标题】:php mysql join results set repeating dataphp mysql join 结果集重复数据
【发布时间】:2014-05-28 12:09:51
【问题描述】:

我几乎阅读了与我的查询相关的所有其他帖子,但找不到明确的答案 - 如果已经回答,我深表歉意。

基本上我有一个产品表和一个图像表,一个产品可以有很多图像。据我了解,与运行多个查询相比,使用单个查询获取所有数据会更好。

我目前使用的左连接查询效果很好,但对我来说似乎效率低下。

我的结果集有很多重复数据(我知道这就是我要的),这是由于“产品”表包含 50 个(ish)列,而“图像”表只有 3 列,所以我的结果集如下所示:

P_ID    P_NAME    P_DESC   -->(rest of product data)    I_ID    I_PATH    I_THUMB
001     a.prod    'This is a product'                   001-01  /a1.jpg   /a1t.jpg
001     a.prod    'This is a product'                   001-02  /a2.jpg   /a2t.jpg
001     a.prod    'This is a product'                   001-03  /a3.jpg   /a3t.jpg
001     a.prod    'This is a product'                   001-04  /a4.jpg   /a4t.jpg

I_ID 是 images 表中的主键,是 'products' 表中的一列,是表之间存在关系的地方。

有些产品可能有 10 或 15 张图片,它们会将“产品”信息复制 10 或 15 次,对我来说这似乎是错误的。在不必要的时候拥有如此多的重复数据。

我想我真正要问的是:这是最好的方法还是我应该有 2 个查询 1 根据其 ID 查找产品,然后另一个查询与查询 1 中的产品相关的图像。

我期待一对多的关系会返回如下内容:

P_ID    P_NAME    P_DESC   -->(rest of product data)    I_ID    I_PATH    I_THUMB
001     a.prod    'This is a product'                   001-01  /a1.jpg   /a1t.jpg
NULL    NULL      NULL                                  001-02  /a2.jpg   /a2t.jpg
NULL    NULL      NULL                                  001-03  /a3.jpg   /a3t.jpg
NULL    NULL      NULL                                  001-04  /a4.jpg   /a4t.jpg

我还认为最好返回一个看起来像这样的多维数组:

$resultset = array(
    'P_ID'=>'001', 
    'P_NAME'=>'a.prod',
    'P_DESC'=>'This is a product'
    (rest of product data) 
    'IMAGES'=>array(
        [0] => Array(
            'I_ID'=>'001-01',
            'I_PATH'=>'/a1.jpg', 
            'I_THUMB'=>'/a1t.jpg')
        [1] => Array(
             'I_ID'=>'001-02',
             'I_PATH'=>'/a2.jpg', 
             'I_THUMB'=>'/a2t.jpg')
        [2] => Array(
             'I_ID'=>'001-03',
             'I_PATH'=>'/a3.jpg', 
             'I_THUMB'=>'/a3t.jpg')
        [3] => Array(
             'I_ID'=>'001-04',
             'I_PATH'=>'/a4.jpg', 
             'I_THUMB'=>'/a4t.jpg')
    )
);

但我这辈子都不知道如何像这样取回数据 - 请帮助

【问题讨论】:

    标签: php mysql resultset multiple-resultsets


    【解决方案1】:

    听起来您应该使用 2 个单独的查询。一个返回产品信息,一个返回图像。否则,您的查询将始终为它匹配的每个图像重复来自产品表的信息。只要在每个表中都对 P_ID 字段进行了索引,性能就不会成为问题。

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2014-10-25
      • 2019-01-18
      相关资源
      最近更新 更多