我现在有数据库设置像这样:GROUP_CONCAT或替代结果
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` int(11) NOT NULL,
`body` int(11) NOT NULL,
`link` int(11) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `translation_pivot` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` text,
PRIMARY KEY (`id`)
)
这是一个相当简化的版本来说明问题,本质上是translation_pivot用于进一步查找文本字符串来自一系列语言表,但这不相关。这里,article
中的title
,body
和link
列包含来自translation_pivot
的引用content
的id。
难点在于做一个INNER JOIN会产生一个名为content
的列,它将只包含来自translation_pivot
的第一个匹配,在这种情况下为title
。
我看过的其他选项是使用translation_pivot.content
上的GROUP_CONCAT。这将工作,但随后我留下一个用逗号分隔的项目列表,并且与第一项,第二项和第三项(这是可以的,但不是很好的)不同,它与title
,body
和link
之间的关系明显失去。更严重的问题是,翻译中的项目可能是几段文字。 group_concat_max_len的默认值是1024,我可以更改它,但是如果设置为高值,会不会影响性能?
理想我想从translation_pivot
与文本结果更换title
,body
和link
列,或至少得到的文本内容回针对每个作为一个单独的列的方式。这可能在一个单一的查询?
我的另一种方法是以翻译_pivot的id作为键值,将键值对作为数组检索,然后在查询文章后进行查找。这只是一个额外的查询,可能更简单一些。
哪种解决方案最适合放大?还是有什么我失踪?
+1瞬间!但是,不确定是否总会有标题,正文和链接值填充。 – 2012-02-13 15:09:04
在这种情况下,你需要一个左连接而不是内连接,编辑我的答案 – 2012-02-13 15:11:47
啊,我刚刚看到你的回答:快回来! +1 – 2012-02-13 15:13:37