我试图找出一个查询来检索特定产品所在的类别列表。
我有一个名为 products 的数据库,其中包含三个名为 categories、product_to_sec_cat_assoc 和 products 的表。
+--------------------+ +--------------------+ +--------------------------+
| Products | | categories | | product_to_sec_cat_assoc |
+--------------------+ +--------------------+ +--------------------------+
| product_id | | category_id | | product_id |
| pri_category_id | | category_name | | category_id |
| name | | url_link | +--------------------------+
+--------------------+ +--------------------+
由于并非所有产品都有次要类别,因此我直接在产品条目中将其主要类别分配给产品。如果它们也在其他次要类别中,我使用名为 product_to_sec_cat_assoc 的关联表来关联更多类别。
我在编写查询时遇到问题,我想在其中创建一个显示特定类别中所有产品的页面。每个产品列表还显示了它们所在的各种次要类别。
我目前的查询是:
select t.*,
GROUP_CONCAT(c.category_name order by pri_category_id, c.category_id) as category_names,
GROUP_CONCAT(c.url_link) as category_links from products t
left join product_to_sec_category_assoc a using (id)
left join categories c on t.pri_category_id = c.category_id or c.category_id = a.category_id
where t.pri_category_id = 12
or (a.category_id = 12 and a.id = t.id)
group by t.title
但是,由于某种原因,如果我将产品添加到多个次要类别中,当我查看其中一个次要类别中的产品时,它只会显示我正在查看的主要类别和次要类别。另一方面,如果我查看主要类别列表,它会显示主要类别及其所有次要类别。
例如,假设我在电子产品主要类别以及平板电脑和移动设备次要类别中拥有 iPad。如果我访问电子产品类别列表,它会在电子产品、平板电脑、手机中显示 iPad。如果我进入移动类别,它会在电子、移动中显示。如果我进入平板电脑类别,它会显示在电子产品、平板电脑类别中。
我遇到的另一个问题是查询也没有正确排序 GROUP_CONCAT(category_name) 和 GROUP_CONCAT(category_link) 以便 category_names 及其链接处于匹配顺序。