如何存储一系列外键值?
假设我有:
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'
答案 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中创建了一个示例结构。希望它适合你