SQL 多对多关系中的序列

Sequences in SQL many to many relationships

如何存储外键值序列?

假设我有:

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'

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

adding an index column to table2 (i.e. have multiple rows per sequence, but then have nightmares changing a sequence)

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

其实,它并没有你想的那么噩梦。当你想修改一个序列时,只需要DELETE某个ID的所有记录,INSERT新序列对应的记录即可。

在这种情况下,也可以只用 SQL:

得到 'sentence'
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

您可以维护 table1 中的 sequence 列,方法是将它引用到同一 table 中的另一列 parent_id

已在 sqlfiddle 中创建示例结构。希望它对你有用

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