特定の製品が含まれるカテゴリのリストを取得するためのクエリを見つけようとしています。
私は、categories、product_to_sec_cat_assoc、およびproductsという3つのテーブルを持つ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がエレクトロニクス、タブレット、モバイルで表示されます。モバイルカテゴリに入ると、電子機器、モバイルに表示されます。タブレットのカテゴリに入ると、電子機器、タブレットのカテゴリに表示されます。
私が抱えているもう1つの問題は、クエリがGROUP_CONCAT(category_name)とGROUP_CONCAT(category_link)の順序を正しく設定していないため、category_namesとそれらのリンクが一致する順序になっていることです。