2010-12-09 124 views
0

这个网站就像一个电子商务网站,我有两个表,我坚持。如何显示谁有一个记录时谁加入另一个表有记录的表格记录

tbl_products 
--------------- 
phash 
product 
price 
desc 
maxcount 


tbl_product_images 
------------------- 
phash 
thumb 
large 

tbl_products存储产品描述 tbl_product_images存储拇指和EAC产品的大的图像的路径。

phash是产品名称的md5,它是我使用的,而不是在将事物组合在一起时使用的id或产品名称。

我有什么问题是说tbl_products有一个产品记录和tbl_product_images 有关该产品有5行的图像。

我将如何运行查询?

$sql = "select 
    tbl_products.phash 
    tbl_products.product 
    tbl_products.price 
    tbl_products.desc 
    tbl_products.maxcount 
    tbl_product_images.phash 
    tbl_product_images.thumb 
    tbl_product_images.large 
    from tbl_products 
    inner join tbl_product_images 
    on tbl_products.phash = tbl_products_images.phash"; 

这将显示5行记录,因为tbl_product_images有5条记录。

的方式,我输出是我的传统方式

$query = $db->query("$sql"); 
while($row = $db->fetch($query)) 
{ 
.... 

} 

我真的不能确定如何我要做到这一点,如果你需要什么,我试图解释,请让我知道更多的解释。感谢

+0

您对输出的期望是什么?您从TBL_PRODUCT_IMAGES获得重复文件 – 2010-12-09 20:19:45

回答

0

最简单的方法是限制的结果从图像表未来的数 - 的是,如果你不小心将返回其图像的每个产品是唯一合适的:

select 
    tbl_products.phash 
    tbl_products.product 
    tbl_products.price 
    tbl_products.desc 
    tbl_products.maxcount 
    tbl_product_images.phash 
    tbl_product_images.thumb 
    tbl_product_images.large 
    from tbl_products 
    inner join (SELECT * FROM tbl_product_images LIMIT 1) images 
    on tbl_products.phash = images.phash 

您可以添加ORDER BY [col] DESC到那个有限的查询,如果在图像表中有一些其他列(如日期),您可以使用它来确定出现哪个图像。

(注:如果有在确定要返回的图像tbl_product_images一些列,你既可以把在一个WHERE条款上查询,或将其包含在连接标准,如:ON tbl_products.phash = tbl_product_images.phash AND tbl_product_images.color = 'Blue'

此外,如果您试图获得具有其所有图像的产品,但仅需要结果集中的一行,则可能将该组图像“转”到列中。但是,如果每个产品可以有任意(或者简单地说)很大数量的图像,这是非常棘手的。您可能会更好,只是每个产品返回多行,并在应用程序代码中处理结果...

+0

此外,出于好奇:您为什么将MD5哈希用作外键而不是产品ID? – 2010-12-09 20:18:40

相关问题