Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Updateowanie po dacie
Bondar91
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 16.01.2014

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


Witam,

chciałbym updateować wiersz w tabeli po najmniejszej dacie jednak nie za bardzo mi to działa:

  1. 'UPDATE magazyn SET ilosc = ilosc - '.$ilosc. ' WHERE id =' . $produkt_id . 'AND MIN(data)'


Co robię nie tak?
Go to the top of the page
+Quote Post
redeemer
post
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


  1. ... AND min(DATA)=DATA
?

Ten post edytował redeemer 22.06.2015, 12:45:35


--------------------
Go to the top of the page
+Quote Post
kartin
post
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

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


Cytat(redeemer @ 22.06.2015, 13:44:51 ) *
  1. ... AND min(DATA)=DATA
?
Powyższe też jest błędne.

Masz błędy składni. Funkcji agregujących nie można używać w ten sposób i nie masz spacji przed AND. Poza tym data to zarezerwowane słowo kluczowe.
Możesz zrobić to np. tak:
  1. UPDATE magazyn
  2. SET ilosc = ilosc - '.$ilosc. '
  3. WHERE id = ' . $produkt_id . ' AND `data` = (SELECT MIN(m1.`data`) FROM magazyn m1 WHERE m1.id = ' . $produkt_id . ')'




Ten post edytował kartin 22.06.2015, 12:54:03


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
Bondar91
post
Post #4





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 16.01.2014

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


Wywala błąd :

You can't specify target table 'magazyn' for update in FROM clause
Go to the top of the page
+Quote Post
redeemer
post
Post #5





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Cytat(kartin @ 22.06.2015, 13:50:24 ) *
Masz błędy składni. Funkcji agregujących nie można używać w ten sposób i nie masz spacji przed AND. Poza tym data to zarezerwowane słowo kluczowe.
Tak, zgoda tylko z funkcją agregującą. To że DATA to słowo kluczowe, wcale nie oznacza, że nie można go wykorzystać w tym kontekscie (to nie DATE) - sprawdź sam.

@Bondar91:
Spróbój tak:
  1. UPDATE magazyn SET ... WHERE id = .. ORDER BY DATA ASC LIMIT 1


Ten post edytował redeemer 22.06.2015, 13:23:53


--------------------
Go to the top of the page
+Quote Post
Bondar91
post
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 16.01.2014

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


Dzięki redeemer działa wink.gif.

Pozdrawiam
Go to the top of the page
+Quote Post
kartin
post
Post #7





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

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


Sprytnie pomyślane z tym sortowaniem i LIMIT.
Jednak nie może być produktu, który ma kilka pozycji o takiej samej dacie. Jeśli taka możliwość jest dopuszczalna to trzeba rozbić aktualizację na dwa kroki. Najpierw znaleźć minimalną datę, a później dokonać aktualizacji.

Mój poprzedni sposób był zły bo w UPDATE nie można używać podzapytań stosujących tą samą tabelę co aktualizowana.

Co do sposobu używania data masz oczywiście rację.


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
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 Aktualny czas: 20.08.2025 - 07:11