我現在有數據庫設置像這樣: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