2016-09-26 78 views
0

我有一個數據庫,其中包含通過djangocms佔位符字段添加的產品文本內容的多餘數據庫表。我期待將這些內容移回到單個表格中。MySQL刪除鏈接表並將3個表合併爲一個

我的三個表是:

products_product:

+------------+------------+ 
| product_id | content_id | 
+------------+------------+ 
|  374 |  1919 | 
+------------+------------+ 

cms_cmsplugin:

+----------------+------+ 
| placeholder_id | id | 
+----------------+------+ 
|   1919 | 2042 | 
+----------------+------+ 

和cmsplugin_text:

+------------------+------------------+ 
| cmsplugin_ptr_id |  body  | 
+------------------+------------------+ 
|    2042 | <p>some_html</p> | 
+------------------+------------------+ 

我期待刪除鏈接表直接將cmsplugin_text正文添加到products_product表中,其字段名稱爲text_content。到目前爲止,我一直在尋找this問題,並想出了以下內容:

INSERT INTO 
products_product(content_id, text_content) 

SELECT 
p.content_id, 
cpt.body as text_content 

FROM products_product p 
JOIN cms_cmsplugin cms ON p.content_id = cms.placeholder_id 
LEFT JOIN cmsplugin_text cpt ON cms.id = cpt.cmsplugin_ptr_id 

不幸的是沒有工作,只是做了我products_product表的混亂。

+0

你爲什麼要這麼做? AFAIK,你會這樣做_de_ - 規範化你的數據庫。 –

+0

額外的字段最初被添加爲一個Django的cms佔位符字段,一直困擾着我們的網站管理員。他們希望能夠在一個地方編輯整個產品,所以我覺得將這些信息轉移回產品本身是一個好主意。 –

+0

如果因爲其他原因需要鏈接表,那麼我認爲沒有理由刪除'cmsplugin_text'表。如果你不需要鏈接表,那麼你應該完全刪除它。 –

回答

0

當您在products_product更新添加列:

UPDATE products, cms_cmsplugin, cmsplugin_text 
SET products.body = cmsplugin_text.body 
WHERE product.content_id = cmsplugin_text.placeholder_id 
AND cmsplugin_text.id = cmsplugin_ptr_id 
+0

花了一點時間格式化,但這就是我以前的做法,簡單而完美。謝謝! –