SQL中的序列多对多关系

时间:2015-07-25 12:42:57

标签: mysql sql many-to-many data-modeling

如何存储一系列外键值?

假设我有:

table1 {id,code}

table2 {id,sequence}

我需要table2.sequence来引用许多table1记录,以便按照给定的顺序在php中连接。我想存储数组,但我不是在想SQL。我可以沿着黑暗的路径解析一个数组字符串,或者向table2添加一个索引列(即每个序列有多个行,但然后让恶梦改变一个序列),但是知道有更好的方法。有什么想法吗?

一个例子:

表1:

1个

2示例

3是

4这个

-

表2:

1?[4,3,1,2]?

-

'...其中table2.id = 1' - > my_concat_function() - > 'thisisanexample'

2 个答案:

答案 0 :(得分:1)

如果您想使用外键,唯一的选择就是您已经描述的内容:

  

向table2添加一个索引列(即每个序列有多行,但后面有恶梦改变序列)

这样做的另一个好处是,您可以轻松检查哪些序列使用特定单词。

实际上,这并不像你想的那么噩梦。如果要修改序列,只需删除具有特定ID的所有记录,并插入与新序列对应的记录。

在这种情况下,也可以只使用SQL获取“句子”:

SELECT GROUP_CONCAT(code SEPARATOR ' ')
FROM (SELECT table2.id, table1.code
          FROM table1 INNER JOIN table2 ON table1.id = table2.sequence
          WHERE table2.id = "$table2id"
          ORDER BY table2.index) AS derived
GROUP BY id

答案 1 :(得分:0)

您可以在sequence本身中维护table1列,方法是将其引用到同一表格中的另一列parent_id

在sqlfiddle中创建了一个示例结构。希望它适合你

http://sqlfiddle.com/#!9/21932/2/0