2012-11-15 131 views
-1

我有一個返回一組記錄一個SQL語句:MySQL的合併記錄與布爾值

SELECT 
    members.id, 
    members.name, 
    emlink.tank, 
    emlink.dps, 
    emlink.heal, 
    emlink.mid, 
    emlink.eid 
FROM 
    members, emlink 
WHERE members.id = $mid AND emlink.eid = $eid 

結果:

1 Widget 0 0 1 1 8 

1 Widget 1 0 0 1 8 

我怎麼能合併這些到像一個記錄:

1 Widget 1 0 1 1 8 

謝謝!

+0

哪些列的數據類型? –

+0

我有一種感覺,你在這裏沒有正確地加入表格...... – gbtimmon

回答

3

你想要一個按位OR?如果是這樣,使用MySQL的BIT_OR()聚合函數:

SELECT members.id, 
     members.name, 
     BIT_OR(emlink.tank), 
     BIT_OR(emlink.dps), 
     BIT_OR(emlink.heal), 
     BIT_OR(emlink.mid), 
     BIT_OR(emlink.eid) 
FROM members, emlink 
WHERE members.id = $mid AND emlink.eid = $eid 

見它sqlfiddle

+0

你不需要在這裏通過聲明嗎? – gbtimmon

+0

@gbtimmon:[*如果在不包含'GROUP BY'子句的語句中使用組函數,則相當於在所有行上進行分組。*](http://dev.mysql.com/doc/en/group -by-functions.html) – eggyal

+0

mySQL只是讓所有的事情變得簡單:P – gbtimmon

1
SELECT M.id, 
     M.name, 
     MAX (E.tank), 
     MAX (E.dps), 
     MAX (E.heal), 
     MAX (E.mid), 
     E.eid 
    FROM members M, 
     emlink E 
    WHERE M.id = $mid 
    AND E.eid = $eid 
    GROUP BY M.id, M.name, E.eid 

或者任何aggreagate功能最適合您的需求,SUM,MAX,BIT_OR等

+0

鑑於問題的標題(「*合併記錄**二進制**值*」 - 我的重點),我的直覺是,這是一個按位操作。 PS - ['COALESCE()'](http://dev.mysql.com/doc/en/comparison-operators.html#function_coalesce)不是一個聚合函數。 – eggyal

+0

您的權利,修復。 – gbtimmon

+0

另外你對這裏的數據類型做出了大的假設。沒有這個,你的答案和其他答案一樣好。 – gbtimmon