MySQL - edycja wielu wierszy

0

Witam
Próbuję napisać skrypt, który edytowałby kilka wierszy w bazie i nie mogę znaleźć sensownego rozwiązania (tzn innego niż mnóstwo zapytań SQL w pętli). Sytuacja wygląda tak:
Wykonuję polecenie SQL, dzięki któremu otrzymuje wartość - przyjmijmy, że jest to "2". Muszę teraz uaktualnić komórkę "bar" na wartość np "X" w każdym wierszu tabeli abc, dla którego "foo" wynosi "2".

tabela abc:
id | foo | bar
1 | 2 | 111
2 | 7 | 222
3 | 4 | 333
4 | 2 | 444
5 | 2 | 555

Jedyne co mi przychodzi do głowy to polecenie "SELECT id FROM abc WHERE foo="2"", potem wrzucenie wszystkich id do tablicy i taka pętla:

for($i=0;$i<$total;$i++)
{
	mysql_query(sprintf("UPDATE abc SET bar='X' WHERE id=%u", $id[$i]), $conn)
}

Jest jakiś prostszy(a z pewnością szybszy) sposób?

0

.."WHERE ID IN(1,2,3,4,5)"

tylko po co edytować kilka wierszy i wstawiać im tą samą wartość?

0

Dzięki, nie znałem takiej składni.

np. żeby ustawić jakiś status wszystkim userom danej grupy :)

0

WHERE ID IN(SELECT id FROM abc WHERE foo="2")

0
Marcin.Miga napisał(a)

WHERE ID IN(SELECT id FROM abc WHERE foo="2")

Nie chce mi to działać. Tzn jeżeli zrobie to na 2 zapytania to jest ok:
$q = "UPDATE abc SET bar='X' WHERE id IN(22,23,24)"; //22,23,24 dostaję z poprzedniego zapytania
a w taki sposób już nie:
$q = "UPDATE abc SET bar='X' WHERE id IN(SELECT id FROM users WHERE costam='costam2')";
Nie wyświetla żadnego błędu, po prostu komórki nie zostają nadpisane.

1
UPDATE abc SET bar='X' WHERE foo = 2
0

Eh...

update `abc` `A` inner join `users` `U` on `A`.`id`=`U`.`id` 
set `A`.`bar`='X' 
where `costam`='costam'
0

A co z złego w

UPDATE abc SET bar='X' WHERE foo =  '2' 

1 użytkowników online, w tym zalogowanych: 0, gości: 1