我正在创建一个网站(用于学校用途),您可以在这里购买来自不同公司的内容。 在其中一个网站上,我想展示所有公司,但只展示您所选择的类别和城市中的公司。
但我也希望它按人气排序。 每当一个人购买东西时,公司在所选类别和城市中的受欢迎程度将提高1。
类别包括:男性,女性和家庭。
为此,我使用了三张桌子:
表1 - 合作伙伴
| partner_id | name | type | logo |
在第一张表中,我有公司名称,类型和徽标。 此表仅用于获取每个公司的名称,类型和徽标。
表2 - single_partners
| id | partner_id | address | zipcode | city |
在第二个表格中,我拥有全国所有公司。 如果一个compay在一个城市中多次定位,则会有多行,但具有不同的ID,地址,邮政编码和城市。 partner_id当然也是一样的。
表3 - partner_pupolarity
| id | partner_id | men | women | family |
在第三张表中,每家公司的受欢迎程度将是。 在这里,每个城市的每个公司都将存储人气价值(男人,女人和家人)。如果公司在这三个类别中没有任何一个,那么它就不会存储在表格中。
我可以向每个城市展示每家公司,但我不能根据类别对其进行排序。
Heres是我想要的一个简单例子:
在第一个网站上,您可以选择一个类别:男性,女性或家庭。 选择类别后,您将通过输入邮政编码来选择城市。
然后,您将看到一个列表,其中将显示最受欢迎的公司,按您选择的类别和城市排序。如果一家公司在同一个城市多次存在,它应该只显示一个。
如果您选择了男士和城市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)) {
}
}
}
我想我应该以某种方式结合三张桌子的数据,但我不知道如何。
..或者我使用三个不同的表做错了吗?
希望你能通过问题理解:)
答案 0 :(得分:1)
您可以做的是使用联接:Here is some MySQL doc about this
但是,在这里,不需要使用2个表用于单个合作伙伴和流行度,因为一行single_partners严格等于partner_popularty的一行,您可以将它们放在同一个表中。您应该将它们放在同一个表中,如果合作伙伴没有注册人气,则使用默认值为零,因此在按人气排序时会显示最后一个。
那么,那么你将有2个表:
表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
答案 1 :(得分:0)
SELECT partners.name FROM partners, single_partners, partner_popularity
WHERE single_partners.name = 'cityname' AND partners.id = single_partners.partner_id AND
partners.id = partner_populariry.partner_id ORDER BY partner_popularity.[category]
据我所知,这就是你要找的东西,或类似的东西,我真的不明白它的全部含义,这个选择你必须做三个不同的,每个类别一个。
对不起,如果我没有帮助。