php - 合并三个表之间的数据

标签 php mysql sql

我正在创建一个网站(用于学校目的),您可以在其中购买来自不同公司的东西。 在其中一个网站上,我想显示所有公司,但仅显示您选择的类别和城市中的公司。

但我也希望它按受欢迎程度排序。 一个人每购买一件商品,该公司在所选类别和城市的受欢迎程度就会提高1。

类别为:男性、女性和家庭。

为此,我使用三个表:

表 1 - 合作伙伴

|  partner_id  |  name  |  type  |  logo  |

在第一个表中,我有公司名称、类型和 Logo 。 该表仅用于获取每个公司的名称、类型和 Logo 。

<小时/>

表 2 - single_partners

|  id  |  partner_id  |  address  |  zipcode  |  city  |

在第二个表中,我列出了整个国家/地区的所有公司。 如果一家公司在一个城市多次出现,则会出现多行,但具有不同的 ID、地址、邮政编码和城市。当然,partner_id 是相同的。

<小时/>

表 3 -partner_pupolity

|  id  |  partner_id  |  men  |  women  |  family  |

在第三张表中,将显示每家公司的受欢迎程度。 这里将存储来自每个城市的每个公司的受欢迎度值(男性、女性和家庭)。如果该公司在这三个类别中的任何一个类别中都没有受欢迎程度,则不会存储在表中。

我可以显示每个城市的每个公司,但我无法根据类别按受欢迎程度对其进行排序。

<小时/>

这是我想要的一个简单示例:

在第一个网站上,您可以选择一个类别:男性、女性或家庭。 选择类别后,您将通过输入邮政编码来选择城市。

然后您将看到一个列表,其中将显示最受欢迎的公司,并按您选择的类别和城市排序。如果一家公司在同一城市存在多次,则应该只显示一个。

如果您选择了“男士”和“城市 1”,您将看到“城市 1”中男士类别中最受欢迎的公司。

如果一家公司在该类别中没有任何受欢迎度值,那么它将位于公司的底部。

<小时/>

我现在能做的只是根据您选择的城市显示公司,但我可以按受欢迎程度对它们进行排序。

这是我尝试过的:

// Load partners
$load_partners = mysql_query("SELECT * FROM partners");
while($partners = mysql_fetch_array($load_partners)) {

    $partner_id = $partners['partner_id'];
    $partner_name = $partners['name'];
    $partner_logo = $partners['logo'];
    $partner_logo_dir = "media/partners/";

    $load_single_partners = mysql_query("SELECT DISTINCT '$partner_name' FROM single_partners WHERE partner_id='$partner_id' and postal='5000'");
    while($single_partners = mysql_fetch_array($load_single_partners)) {

        $single_partners_id = $single_partners['partner_id'];


            echo '<div class="partner" style="background: url('.$partner_logo_dir.$partner_logo.'); background-size: cover;" data-partner-id="'.$partner_id.'">'.$partner_name.'
        </div>'."\n";
        $order_partners = mysql_query("SELECT * FROM partner_popularity WHERE partner_id = '$single_partners_id'");
        while($order = mysql_fetch_array($order_partners)) {
        }
    }
}

我认为我应该以某种方式合并三个表中的数据,但我不知道如何。

..或者我使用三个不同的表做错了?

希望你能通过问题理解:)

最佳答案

要实现此目的,您可以使用连接: Here is some MySQL doc about this

但是在这里,对于单一合作伙伴和流行度使用2个表并不是真正需要的,因为一行single_partners严格等于一行partner_popularty,你可以将它们放在同一个表中。您应该将它们放在同一个表中,如果合作伙伴没有注册受欢迎程度,则使用默认值零,这样在按受欢迎程度排序时它将显示在最后。

那么,你将有 2 张 table :

表 1 - 合作伙伴

|  partner_id  |  name  |  type  |  logo  |

表 2 - single_partners

|  id  |  partner_id  |  address  |  zipcode  |  city  | pop_men | pop_women | pop_family

现在,您选择所有内容的查询变得非常简单(只需选择合作伙伴,过滤城市,对它们进行排序即可完成),并且通过一些分组和联接,您还可以选择按受欢迎程度排序的合作伙伴汇总在所有城市:

SELECT p.*,
       SUM(pop_men) AS total_pop_men,
       SUM(pop_women) AS total_pop_women,
       SUM(pop_family) AS total_pop_family
FROM partners p
JOIN single_partners sp ON sp.partner_id = p.partner_id
GROUP BY partner_id
ORDER BY total_pop_men DESC,
         total_pop_women DESC,
         total_pop_family DESC

关于php - 合并三个表之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23626176/

相关文章:

sql - 将字符附加到 Oracle SQL 中多行中的字符串

php - 什么时候使用 CMS 构建网站是好主意还是坏主意

php - 使用 mysql 查询来检查时间戳值

php - LEMP + WordPress 设置失败

mysql - 数据丢失时删除行 2 joins away

php - MySQL 查询,使 ORDER BY rand() 将特定行放在底部

php - 使用 PHP 将输入 SQL 查询格式化为 HTML?

java - 使用 hibernate 用数据填充表的正确方法

mysql - 如何在没有联合运算符的情况下运行此查询?

mysql - 将值插入到基于另一个表的表中