Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czy da się wykonać takie zapytanie ?, Przepisanie wartości z jednego wiersza do drugiego w jednej tabeli, al
sawic
post 6.12.2006, 21:57:56
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.05.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
wipo
post 7.12.2006, 16:47:12
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
sawic
post 7.12.2006, 19:01:31
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.05.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
wipo
post 7.12.2006, 19:33:53
Post #4





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

Ostrzeżenie: (0%)
-----


A coś takiego?
insert into tabela (uzytkownik, jakies_pole, nowy) select uzytkownik, jakies_pole, 1 from tabela where nowy=0


--------------------
Go to the top of the page
+Quote Post
sawic
post 7.12.2006, 19:58:19
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.05.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 17.06.2025 - 12:32