Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy da się wykonać takie zapytanie ?
Forum PHP.pl > Forum > Bazy danych > MySQL
sawic
Witam.
Robię dośc skomplikowane obliczenia z wielu tabel, i czasem skrypt się kończył zanim zdążyłem wszystko policzyć.
Dodałem zatem nową kolumnę: nowy, gdzie dla każdego nowo obliczonego wiersza wpisuję 1, gdy już skończę wszystkie obliczenia kasuje wszystkie wiersze gdzie nowy = '0' i robie update na nowy = '0' tam gdzie jest jeden. W ten sposób rozwiązałem, że skrypt może się zawsze zakończyć a ja i tak będę czytał tylko poprawne wartości.
Problem występuje, gdy chcę coś przenieść z nowy = '0' do nowy = '1'.
Struktura tabeli:

uzytkownik (char (20))
jakies_pole (int (11))
nowy (int (1))

W tabeli mam użytkowników z polem nowy = '0'
Następnie wpisuję użytkowników do bazy, każdy z nowy = '1'
I teraz chcę skopiować wartość `jakies_pole` z nowy = '0' do nowy = '1' odpowiednio dla każdego użytkownika.

Próbowałem takiego tworu:
  1. UPDATE db.TABLE SET jakies_pole = jakies_pole WHERE db.TABLE.uzytkownik = db.TABLE.uzytkownik AND nowy = '1'

Niestety nie działa.

Czy w ogóle da się to jakoś wykonać w jednym zapytaniu ?

Pozdrawiam
wipo
a coś takiego:
update tabela set wartosc=nowa_wartosc where nowy=0 and cos dodatkowego
albo jak nowego też zmieniasz to:
update tabela set wartosc=nowa_wartosc, nowy=1 where nowy=0 and cos dodatkowego
Nie wiem czy dokładnie o coś takiego chodzi ale z opisu wynika że chyba tak
sawic
Absolutnie nie o coś takiego winksmiley.jpg
Ja to potrafię zakręcić nawet najprostszą rzecz sad.gif
Już tłumaczę. Strktura tabeli jak napisałem wyżej, zawartość:

uzytkownik | jakies_pole | nowy
user1 | 25 | 0
user2 | 13 | 0
user1 | NULL | 1

I teraz chciałbym wykonać zapytanie które skopiuje mi wartość z `jakies_pole` dla user1 and nowy = '0' do `jakies_pole` dla user1 and nowy = '1'

W efekcie czego w bazie będę miał:
uzytkownik | jakies_pole | nowy
user1 | 25 | 0
user2 | 13 | 0
user1 | 25 | 1

Za groma nie wiem jak to rozwiązać.

Pozdrawiam
wipo
A coś takiego?
insert into tabela (uzytkownik, jakies_pole, nowy) select uzytkownik, jakies_pole, 1 from tabela where nowy=0
sawic
Też się nie da.
Przedewszystkim dlatego, że nie robię insert a robię update.
I coś takiego:
  1. UPDATE db.TABLE SET jakies_pole = (SELECT jakies_pole FROM db.TABLE WHERE nowy = '0' AND db.TABLE.user = db.TABLE.user) WHERE nowy = '1'

Wywala mi taki komunikat:
You can't specify target table 'table' for update in FROM clause

pozdrawiam
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.