Php 当另一个被联接的表具有多条记录时,如何显示具有一条记录的表记录

Php 当另一个被联接的表具有多条记录时,如何显示具有一条记录的表记录,php,mysql,Php,Mysql,这个网站就像一个电子商务网站,我有两个表,我卡在上面 tbl_products --------------- phash product price desc maxcount tbl_product_images ------------------- phash thumb large tbl_products存储产品说明 tbl_产品_图像存储拇指的路径和eac产品的大图像 phash是产品名称的md5,它是我在匹配产品时使用的名称,而不是id或产品名称 我想说的是,tbl_产品有

这个网站就像一个电子商务网站,我有两个表,我卡在上面

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


tbl_product_images
-------------------
phash
thumb
large
tbl_products存储产品说明 tbl_产品_图像存储拇指的路径和eac产品的大图像

phash是产品名称的md5,它是我在匹配产品时使用的名称,而不是id或产品名称

我想说的是,tbl_产品有一个产品记录和tbl_产品图像 与该产品相关,其图像有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_产品_图像有5条记录

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

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

}

我真的不确定我要怎么做,如果你需要更多的解释,我试图解释,请让我知道。谢谢

最简单的方法是限制来自图像表的结果数量-尽管这仅适用于您不关心为每个产品返回哪个图像的情况:

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
如果images表中有其他列(如日期)可用于确定显示哪个图像,则可以将ORDER BY[col]DESC添加到该受限查询中

(注意:如果tbl_产品_图像中有一些列决定返回哪个图像,您可以将其放入查询的
WHERE
子句中,或者将其包含在联接条件中,例如:
关于tbl_产品。phash=tbl_产品_图像。phash和tbl_产品_图像。color='Blue'


此外,如果您试图获取包含所有图像的产品,但只希望结果集中有一行,则可以将图像集“透视”到列中。然而,如果您可以在每个产品上拥有任意数量(或者仅仅是大量)的图像,那么这是很棘手的。您最好只返回每个产品的多行,并在应用程序代码中处理结果…

另外,出于好奇:为什么要使用MD5哈希作为外键而不是产品ID?请继续关注dj,我将向您解释。我得让人下车。在我看来,做散列比做id要好得多。好吧,我写了一个小样本,不知道这个样本是否有用,但我会试试。你可以看到我有两个产品,每个产品都有很多图片。这些图像由客户端在后端上传。每次他们添加一个md5散列作为产品名称生成的id存储。您可能会问,为什么不将产品和图像与产品名称联系起来。问题是,如果文件名中有许多带有空格和符号的字符,那么可能会出现错误,或者是错误的做法。我使用md5或有时使用sha1或其他任何东西来保持简短,并且我可以将产品与其图像联系起来。如果我在products表中使用id并在images表中添加产品的id,它可以工作,但我不知道。但你明白吗?我会使用代理密钥。更正拼写错误的产品名称时会发生什么情况?由于哈希值已更改,某些图像记录现在是否会成为孤儿?我在工作中看不到你的tinypic.com url。它正被我们的websense过滤器阻止:(您对输出的期望是什么?您从TBL_产品_图像中获得了副本。)