我几乎阅读了与我的查询相关的所有其他帖子,但无法找到明确的答案 - 如果已经回答,我会道歉。
基本上我有一个产品表和一个图像表,1个产品可以有很多图像。我的理解是,使用单个查询获取所有数据比运行多个查询更好。
我目前正在使用左连接查询,它运行得非常好,但对我来说似乎效率低下。
我的结果集有很多重复数据(我知道这就是我要求的),并且由于'products'表包含50(ish)列,因为'images'表只有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')
)
);
但我不能为我的生活找到如何以这样的方式获取数据 - 请帮助
答案 0 :(得分:0)
听起来你应该使用2个单独的查询。一个返回产品信息,一个返回图像。否则,您的查询将始终重复产品表中与其匹配的每个图像的信息。只要在每个表中为P_ID
字段编制索引,性能就不会成为问题。