我正在创建一个网站(用于学校目的),您可以在其中购买来自不同公司的东西。 在其中一个网站上,我想显示所有公司,但仅显示您选择的类别和城市中的公司。
但我也希望它按受欢迎程度排序。 一个人每购买一件商品,该公司在所选类别和城市的受欢迎程度就会提高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/