2010-04-05 71 views
0

我有一個表有3列:id,a_id和b_id。如何根據mysql中的其他錶行更改表中的行?

假設行是這樣的:

1, a1, b1 
2, a1, b2 
3, a1, b3 
4, a2, b4 
5, a2, b5 
6, a2, b6 

我想將其轉換爲

1, a1, b1 
2, a1, b1 
3, a1, b1 
4, a2, b4 
5, a2, b4 
6, a2, b4 

所以我要讓所有對應A_ID一樣B_ID,並等於一個是首先找到。我怎樣才能做到這一點?爲了簡單起見,我從表中刪除了其他列。所以請忽略這裏的行重複。

+0

如果A_ID和B_ID總是相互對應,那麼你爲什麼需要他們兩個?完全刪除b_id列並僅使用a_id是否更有意義? – animuson 2010-04-05 22:23:09

+0

由於各種原因,我必須保留兩個ID。 – understack 2010-04-05 22:30:07

回答

1

假設b_id是數學上最小的每個id組:

UPDATE 
    tbl 
SET 
    b_id = (
    SELECT MIN(b_id) 
     FROM tbl AS i 
    WHERE i.id = tbl.id AND i.a_id = tbl.a_id 
) 
0
$result = mysql_query("SELECT a_id, b_id 
FROM table 
GROUP BY a_id 
ORDER BY id ASC"); 

while ($row = mysql_fetch($result)) 
{ 
    mysql_query("UPDATE table SET b_id=$row['b_id'] WHERE a_id=$row['a_id']"); 
}