2010-04-05 4 views
0

J'ai une table qui a 3 colonnes: id, a_id et b_id.Comment changer les lignes d'une table en fonction d'autres lignes de la table dans mysql?

lignes Supposons sont comme ceci:

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

Je veux le convertir en

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

Je veux faire toute la b_id correspondant à a_id même et égale à celle qui est trouvé en premier. Comment puis-je faire ceci? Pour simplifier, j'ai supprimé d'autres colonnes de la table. Donc s'il vous plaît ignorer la duplication de lignes ici.

+0

Si a_id et b_id correspondra toujours à l'autre, alors pourquoi avez-vous besoin des deux? Ne serait-il pas plus logique de supprimer complètement la colonne b_id et d'utiliser uniquement a_id? – animuson

+0

pour diverses raisons, je dois garder les deux ids. – understack

Répondre

1

En supposant b_id est mathématiquement le plus petit dans chaque groupe 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']"); 
} 
Questions connexes