[英]Storing an array of id's in one db field VS breaking out into a joining table - what sql to use?
我得出的结论是,将ID数组存储在单个数据库字段(1、5、48)中的第一个快速解决方法可能不是最好的方法,但是如果我将它们分解为“父项ID”(单个)的联接表,然后子相关项ID(多个)链接到一个单独的表会更好。
但是现在我不确定要使用什么MySQL查询来获取匹配项。
因此,提交了一个搜索表单,其中“ related_item”数组为“ 1、5、8”,而我的一个“ parent_items”在关联表中具有相关项匹配项“ 1”和“ 8”。...
那么什么mysql查询将返回这些匹配?
更新:
因此,如果有人提交了针对行业=“银行”或“零售”的搜索表单,我将如何返回“ topshop”和“ hsbc”的公司记录
诸如此类...如果您正在“搜索”孩子或父母,对您的描述对我来说还不清楚。 我认为您的意思是要搜索儿童:
-- SEARCH CHILDREN --
SELECT p.*, c.* FROM child_table c
LEFT JOIN linking_table l ON (p.id = l.child_table_id)
LEFT JOIN parent_table p ON (l.parent_item_id = p.id)
WHERE c.id IN (1,5,4,8)
-- OPTIONAL AND CLAUSE for p.id = ? --
如果您打算搜索父级,则可以重新整理订单,尽管您可以使用完全相同的查询,但您的WHERE IN子句将位于p.id
而不是c.id
。
请注意,尽管这样做会使子项每次匹配为您赢得1行,所以您将多次具有相同的父项。 如果您不需要实际的子数据,则可以使用DISTINCT
仅返回一个实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.