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 中创建示例结构。希望它对你有用
如何存储外键值序列?
假设我有:
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 中创建示例结构。希望它对你有用