如何在另一个已加入的表具有多条记录时显示具有一条记录的表记录

时间:2010-12-09 20:04:44

标签: php mysql

这个网站就像一个电子商务网站,我有两张桌子,我坚持不懈。

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))
{
....

}

我真的不确定我将如何做到这一点,如果您需要更多解释我想解释的内容请告诉我。感谢

1 个答案:

答案 0 :(得分: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添加到该LIMITed查询。

(注意:如果 tbl_product_images中的某些列确定要返回哪个图像,您可以将其放在查询的WHERE子句中,或将其包含在连接中标准,如:ON tbl_products.phash = tbl_product_images.phash AND tbl_product_images.color = 'Blue'

此外,如果 试图获取包含其所有图像的产品,但只想在结果集中使用一行,则可以将图像集“转动”为列。但是,如果每个产品可以有任意(或简单大)的图像数量,这很棘手。您可能最好只为每个产品返回多行,并在应用程序代码中处理结果......