Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Update z Selectem
Forum PHP.pl > Forum > Bazy danych > MySQL
oczkers
MySql wywala mi błąd składni ale nie mam pojęcia czemu:

Kod
UPDATE `used` SET 1 FROM get24_codes WHERE `id`= (SELECT `id` FROM get24_codes WHERE `used` = 0 AND `finished` = 0 LIMIT 1);
wookieb
Poznałeś składnię update?
Skąd bierzesz "FROM" ?
oczkers
Ojc, zaspany jestem, chodziło mi o:
Kod
UPDATE get24_codes SET `used`=1 WHERE `id`=(SELECT `id` FROM get24_codes WHERE `used` = 0 AND `finished` = 0 LIMIT 1)


generalnie chodzi mi o zablokowanie tabeli pomiędzy selectem oraz updatem
rollen
Cytat(oczkers @ 29.06.2011, 16:43:41 ) *
Kod
UPDATE get24_codes SET `used`=1 WHERE `id`=(SELECT `id` FROM get24_codes WHERE `used` = 0 AND `finished` = 0 LIMIT 1)


To w Mysqlu nie przejdzie... Nie zrobisz update`a na tabeli, której używasz w podzapytaniu.

Spróbuj tak:

  1. UPDATE get24_codes AS gc JOIN (SELECT `id` FROM get24_codes WHERE `used` = 0 AND `finished` = 0 LIMIT 1) AS tmp ON gc.id = tmp.id
  2. SET used=1


Powinno zadziałać
oczkers
Cytat(rollen @ 29.06.2011, 19:12:42 ) *
  1. UPDATE get24_codes AS gc JOIN (SELECT `id` FROM get24_codes WHERE `used` = 0 AND `finished` = 0 LIMIT 1) AS tmp ON gc.id = tmp.id
  2. SET used=1


Powinno zadziałać

Dzięki działa wyśmienicie, mam jeszcze tylko jedno pytanie - czy istnieje możliwość zwrócenia wartości id?
rollen
Sam update zwraca ilość zmdyfikowanych rekordów, więc nie za bardzo w jednym zaputaniu.

W dwóch zapytaniach można to zrobić tak:

  1. UPDATE get24_codes AS gc JOIN (SELECT (@mod_id:=`id`) AS id FROM get24_codes WHERE `used` = 0 AND `finished` = 0 LIMIT 1) AS tmp ON gc.id = tmp.id SET used=1;
  2.  
  3. SELECT @mod_id;


Przed użyciem polecam zapoznać się z http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.