繁体   English   中英

VS将一个ID数组存储在一个db字段中VS分解成一个联接表-使用什么SQL?

[英]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查询将返回这些匹配?

更新:

  • 我有一个表“ companies”,例如HSBC和TOPSHOP作为记录。
  • 有一个单独的“行业”表,可能是“银行”和“零售”
  • 有一个联接表,该表是company_id和industry_id,它们将它们配对在一起

因此,如果有人提交了针对行业=“银行”或“零售”的搜索表单,我将如何返回“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM