Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Updateowanie po dacie
Forum PHP.pl > Forum > Bazy danych > MySQL
Bondar91
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?
redeemer
  1. ... AND min(DATA)=DATA
?
kartin
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 . ')'


Bondar91
Wywala błąd :

You can't specify target table 'magazyn' for update in FROM clause
redeemer
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
Bondar91
Dzięki redeemer działa wink.gif.

Pozdrawiam
kartin
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ę.
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.