我想问一下我的应用程序有什么更好的解决方案。我有 1 个表:标记 - 我存储标记的位置 - 名称、符号和描述。然后我有另一个表:产品 - 每个产品都有一些标记 1 - N。现在我将产品标记存储在表产品中 - 列 prod_marks - 逗号分隔。然后我通过另一个查询获得这些标记。我从产品表中获取所有标记的 ID,然后运行查询来获取它们。是好还是 1 查询与 join 和 group_concat 到另一个表可以说:prodmarks (pmark_id, pmark_prodID, pmark_markID) 更好?
谢谢
编辑:
表 ci_products
表 ci_marks(所有可能的带有符号和描述的标记)
现在我的查询如下所示:
SELECT `prod_id`, `prod_name`, `prod_desc`, `prod_num`, `prod_marks`, `prod_minprice`, `prod_minbid`, `prod_cat`, GROUP_CONCAT(img_url) images
FROM (`ci_products`)
JOIN `ci_prodimages` ON `ci_prodimages`.`img_pid`=`ci_products`.`prod_id`
WHERE `prod_cat` = '4'
OR `prod_cat` = '8'
OR `prod_cat` = '9'
OR `prod_cat` = '10'
GROUP BY `prod_id`
查询结果:
然后我在 prod_marks 中输入如下内容:2,5,6 然后使用这些 ID 运行另一个查询以获取标记的名称和描述。
第二个想法是对新表进行另一个连接:ci_prodmarks - 那里有 pmark_id、pmark_pid(fk 到 prod_id)、pmark_mid(fk 到 mark_id)以及另一个关于标记符号和标记描述的 group_concat
编辑:
这就是我现在得到的。使用这些数据,我运行另一个查询来获取这些标记。问题是:我应该制作另一个与 ci_products 和 ci_marks 相关的表来建立 MN 关系吗?然后我想查询以获取所有带有相关标记的产品。当我使用 JOIN 时,它会为每个图像和标记生成多个产品,因此我使用了 group_concat。那么我会为 mark_mark 和 mark_desc 使用另一个 group_concat 吗?
编辑:
具有多个结果问题的关系表的新 SQL
SELECT `prod_id` , `prod_name` , `prod_desc` , `prod_num` , `prod_marks` , `prod_minprice` , `prod_minbid` , `prod_cat` , GROUP_CONCAT( img_url ) images, GROUP_CONCAT( mark_mark ) marks, GROUP_CONCAT( mark_desc
SEPARATOR ";" ) mark_descriptions
FROM (
`ci_products` , `ci_marks`
)
JOIN `ci_prodimages` ON `ci_prodimages`.`img_pid` = `ci_products`.`prod_id`
JOIN `ci_prodmarks` ON `ci_prodmarks`.`pmark_pid` = `ci_products`.`prod_id`
AND ci_prodmarks.pmark_mid = ci_marks.mark_id
WHERE `prod_cat` = '4'
OR `prod_cat` = '8'
OR `prod_cat` = '9'
OR `prod_cat` = '10'
GROUP BY `prod_id` , `mark_id`