2016-09-16 83 views
1

令行有Mysql的表像 ID主鍵(idstudy,idarea和idcategory外鍵)MySQL的 - 具有相同的列內容

**** Table : Operations 
id  idstudy idarea idcategory content  lang 
1  22   11  3   content1EN EN 
2  22   11  3   content1FR FR 
3  22   11  3   Content2FR FR 
4  22   11  3   Content2EN EN 
5  35   10  5   Content5EN EN 
6  35   10  5   Content5FR FR 
7  35   23  12  Content5EN EN  
8  35   23  12  Content5FR FR  

我的目標:到彙編語言到同一行(FR和EN)獲取一行加一列(例如ContentEN)並刪除lang列。

但我的問題我的表不是按順序,我不能重新編號,所有我知道的是idstudy idarea和idcategory但這些都不是唯一的,有時我有3行是相同的除了(ID和內容)

我有解決方案,但我不知道如何在mysql中編寫它:是用一種語言查找所有記錄(相同的idstudy相同的idarea相同的idcategory),然後通過添加列(1爲第一個結果,2第二個......)

****表:每個語言的組(idstudy,idarea,idcategory)在訂單後的操作(新訂單)

id  idstudy idarea idcategory content  lang  order 
1  22   11  3   content1EN EN  1 
2  22   11  3   content1FR FR  1 
3  22   11  3   Content2FR FR  2 
4  22   11  3   Content2EN EN  1 
5  35   10  5   Content5EN EN  1 
6  35   10  5   Content5FR FR  1 
7  35   23  12  Content5EN EN  1 
8  35   23  12  Content5FR FR  1 

我只需要這個結果,之後就用的NodeJS

值得注意的組裝艾威:對不起,如果我的解釋也不是那麼好。

+1

您的示例的第四行不應該是爲了'= 2'?它具有相同的ID和第1行 – MtwStark

+0

的同一種語言,爲什麼是'爲了= 1'在'ID == 4'? – Marcus

+0

謝謝你的提示,我用好的桌子更新我的問題。感謝 – AmenzO

回答

2

試試這個:

SELECT id, idstudy, idarea, idcategory, content, lang, dense_rank as 'order' 
FROM (
    SELECT 
     @dense:=IF(@prev_col1=t.idstudy AND @prev_col2=t.idarea AND @prev_col3=t.idcategory AND @prev_col4=t.lang, IF(@prev_col5=t.content, @dense, @dense+1), 1) AS dense_rank, 
     t.*, 
     @prev_col1:=t.idstudy, @prev_col2:=t.idarea, @prev_col3:=t.idcategory, @prev_col4:=t.lang, @prev_col5:=t.content 
    FROM (SELECT * FROM t1 ORDER BY idstudy, idarea, idcategory, lang, content) t, 
     (SELECT @dense:=1, @prev_col1:=NULL, @prev_col2:=NULL, @prev_col3:=NULL, @prev_col4:=NULL, @prev_col5:=NULL) var 
) F 
ORDER BY idstudy, idarea, idcategory, lang, content; 

在MySQL中,你可以模仿MS-SQL分析功能以這種方式Analytical Function in MySQL - ROW_NUMBER, RANK, DENSE_RANK

在SQL-Sever的,你可以使用DENSE_RANK()

SELECT *, DENSE_RANK() OVER (PARTITION BY idstudy, idarea, idcategory, lang ORDER BY content) [order] 
FROM tableName 
+0

OP說,他是使用MySQL並沒有SqlServer的 –

+0

答案是完全 – MtwStark

+0

謝謝MtwStark,即時通訊試圖瞭解這一切,即時通訊在MySQL不是專家,所以這將需要一段時間:) – AmenzO

0

Fianllay我發現了另一個解決方案,我製作了兩張具有相同結構(法語和英語)的表格,重新生成eeach表格的ID(每個表格爲1.2.3)。

正如我在每個表我檢查每一行如果確定(每個ID必須在兩種語言涉及相同內容)

特別感謝@MtwStark他的時間500行:)我感謝您的幫助

有時,當我們試圖解釋我們的問題,我們找到解決辦法:)

+0

歡迎您,很高興有任何幫助 – MtwStark

+0

謝謝你的disponibility和你的支持:) – AmenzO

相關問題