2010-04-05 72 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']"); 
}