组合3个表以生成配置文件列表(HTML / PHP / MySQL)

问题描述 投票:0回答:1

我正在学习PHP / MySQL,通过网站向当地农民提供信息。不幸的是,我遇到了两个看似棘手的障碍,我正在努力克服这些障碍。

我有3个表,'pro_list'(PRIMARY KEY producer_id),'product_list'(PRIMARY KEY product_id)和中间'prod_to_prod'(FOREIGN KEYS producer_id和product_id),以实现其他两个之间的多对多关系。

我们的想法是生成一个div元素列表,其中包含从'pro_list'获取的信息(例如电话,电子邮件,位置...)以及它们产生的内容,来自'product_list',使用他们的桥接'prod_to_prod'(作为一个生产者可以生产许多产品,同一产品可由许多不同的生产商生产)。

我的问题已经开始生成基础查询,它应该返回一个优雅的生产者列表,使用桥接作为参考(即我希望列表只显示其生产者的生产者,其生产者的产品ID与'prod_to_prod'相关联)。 你可以想象,我用的代码......

<?php
$pagequery="SELECT * FROM pro_list 
            OUTER JOIN prod_to_prod 
            WHERE pro_list.producer_id=prod_to_prod.producer_id 
            LIMIT $offset, $num_of_cells";
$res_pagequery=mysqli_query($conn,$pagequery);    

while($proddiv=mysqli_fetch_array($res_pagequery))  {
echo "<div>
      ...Producer:".$proddiv['prod_firstname']."...
      </div>; 
}
?>

...返回了一个包含大量重复项的列表,因为许多producer_id与'prod_to_prod'中的不同product_ids相关联。我已经使用SELECT DISTINCT尝试了很多组合,但到目前为止,我已经获得了所有错误消息。

我甚至不知道如何处理扩展查询(即显示与相应div中每个生产者关联的产品的名称,基于关联pro_list.product_id = prod_to_prod.product_id AND product_list.product_id = prod_to_prod.product_id。我的猜测是我必须使用至少两个SELECT的UNION,但由于我只是获得重复或错误,我甚至不敢尝试......

你解决这个问题的方法是什么?

php select mysqli jointable
1个回答
0
投票

当你执行(LEFT)OUTER JOIN时,无论prod_to_prod中是否有匹配的行,每个产品至少会有一行。您想将其更改为INNER JOIN,这实际上是默认值 - 您只需使用JOIN。

正如您所注意到的,您将在prod_to_prod中的每个匹配的结果集中获得一行。

如果您使用SELECT *,您将获得所有列,但由于您不关心prod_to_prod中的任何列,您可以改为指定所需的特定列,或者您可以指定SELECT pro_list.*这样做,DISTINCT将有助于消除重复,或者您可以使用GROUP BY pro_list.producer_id为每个生产者获取一行。

© www.soinside.com 2019 - 2024. All rights reserved.