Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][MySQL]zapytanie z warunkiem
Forum PHP.pl > Forum > Przedszkole
lok
Czy da się w ramach jednego zapytania wykonać UPDATE rekordu w zależności od tego czy wartość w kolumnie jest większa od innej wartości?
Konkretniej Jeżeli data w polu `expDate` jest większa (późniejsza) niż obecna data to uaktualnij rekord do daty równej expDate+7 dni, w innym wypadku uaktualnij do NOW()+7 dni.

Pozdrawiam
Fifi209
Oczywiście, że się da. Pytasz bo nie sprawdzałeś, prawda?
lok
fałsz! Wiem jak operować na datach ale nie mam pojęcia jak instrukcje warunkową zrobić w zapytaniu. Szukalem czegos w stylu if else ale kiszka. Btw zamiast takich domniemywań powiedz jedno chociaż kluczowe słowo to sobie dalej poszukam po manualach, a tak Twoja wypowiedz jest bezwartościowa
qrzysztof
Odpowiednikiem ifa jest WHERE ale Ty szukasz odpowiednika else.

Ja bym to zrobił jednak w dwóch zapytaniach choć nie wykluczam, że jakaś możliwość w jednym jest. Aż taka strata wydajności będzie?
jasin
Jeśli za każdym razem data jest zwiększana o 7 dni więc można takie coś napisać:
  1. UPDATE tabela SET expDate = DATE_ADD(expDate, INTERVAL 7 DAYS) WHERE tu_jakis_twoj_warunek_na_wybor_rekordu;
qrzysztof
Ale o ile 'expDate' może być wcześniejsza niż obecna to należy ją chyba zaktualizować o 7 dni od NOW().

Można by spróbować czy takie coś zadziała:

  1. UPDATE tabela SET expDate = DATE_ADD(IF(expDate>CURDATE(), expDate, CURDATE()), INTERVAL 7 DAYS)


CURDATE() można oczywiście zastąpić NOW() w zależności od potrzeb
skowron-line
Cytat(qrzysztof @ 15.11.2009, 09:53:03 ) *
Ale o ile 'expDate' może być wcześniejsza niż obecna to należy ją chyba zaktualizować o 7 dni od NOW().

Można by spróbować czy takie coś zadziała:

  1. UPDATE tabela SET expDate = DATE_ADD(IF(expDate>CURDATE(), expDate, CURDATE()), INTERVAL 7 DAYS)

No okej ale chyba lepiej wyrzucić IF przed DATE_ADD
  1. UPDATE tabela SET expDate = IF( expDate > CURDATE(), CURDATE(), DATE_ADD( expDate, INTERVAL 7 DAY ))

[/sql]
qrzysztof
Ale w tym przypadku jeśli
  1. expDate > CURDATE()



to uaktualnia do CURDATE() zamiast do CURDATE() + 7 dni a defacto nawet expDate + 7dni
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.