Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Zapytanie mysql DELETE BUDOWA
Forum PHP.pl > Forum > Przedszkole
kayy
Witam,

potrzebuje zapytania które;

a)Wywala wszystkie rekordy z tabeli kiedy ; mam datę w polu time i w timeto, jeżeli timeto będzie równy, lub mniejszy time wtedy wywalić. Data jest w formacie 5122008(dzień bez zer wiodących, miesiąc bez zer wiodących, pełen rok).



Z góry wielkie dzięki!
mike
Zmień format daty na normalny. Czyli DATE, DATETIME czy jakiś inny TIMESTAMP.
kayy
Tylko, że wcześniej mam skrypt dodający 60 dni i nie wiem jak inaczej to zapisać w MYSQL (format daty);

  1. INSERT INTO `time` (`id`,`username`,`time`,`timeto`) VALUES ('','$nickname', DATE_FORMAT(CURRENT_DATE(), '%d%m%Y'), DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY), '%d%m%Y'))
Cezar708
Cytat(kayy @ 5.12.2008, 15:03:08 ) *
Data jest w formacie 5122008(dzień bez zer wiodących, miesiąc bez zer wiodących, pełen rok).


to w takim razie wykonaj małe zadanie i daj mi 100% opowiedź:

zadanie:
Jeżeli timeto = 1112008 to jest to:
a] 1 listopada 2008 roku
b] 11 stycznia 2008 roku
c] nie da się jednoznacznie odpowiedzieć

jeżeli dałeś odpowiedź c] to w takim razie nie ma możliwości rozwiązania Twojego problemu od ręki bez wcześniejszego przepisania dat na normalny format

pozdro
Cezar708
ddiceman
Pisalem Ci juz, ale nie mowiles, ze bez leading zeros byloby tak:
  1. DELETE FROM tabela WHERE STR_TO_DATE(timeto, '%e%c%Y') < CURRENT_DATE();

trzymanie daty bez zer wiodacych jest bezsensowne, bo jak odroznisz, czy 2112008 to 21 stycznia czy 2 listopada?
Testowalem z leading zeros i na pewno dziala:
  1. CREATE TABLE ftest (id int NOT NULL AUTO_INCREMENT PRIMARY KEY, timeto varchar(200));
  2. INSERT INTO ftest VALUES (NULL, '04122008');
  3. SELECT * FROM ftest; DELETE FROM ftest WHERE str_to_date(timeto, '%d%m%Y') < current_date();
  4. SELECT * FROM ftest;
kayy
#up
W takim razie jak inaczej zapisać
  1. INSERT INTO `time` (`id`,`username`,`time`,`timeto`) VALUES ('','$nickname', DATE_FORMAT(CURRENT_DATE(), '%d%m%Y'), DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY), '%d%m%Y'))
aby było z zerami wiodącymi?
ddiceman
Dokladnie tak, jak jest - to jest z zerami wiodacymi. jakiego typu masz pole timeto?
kayy
Date, przyjmuje Y.m.d albo Y.d.m, a ja  chcę d.m.Y czyli tak jak wykonuje to zapytanie
  1. $zapytanka = "INSERT INTO `time` (`id`,`username`,`time`,`timeto`) VALUES ('','$nickname', DATE_FORMAT(CURRENT_DATE(), '%d%m%Y'), DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY), '%d%m%Y'))";
to timeto i time = 0000-00-00
Cezar708
Cytat(kayy @ 5.12.2008, 15:12:16 ) *
#up
W takim razie jak inaczej zapisać
  1. INSERT INTO `time` (`id`,`username`,`time`,`timeto`) VALUES ('','$nickname', DATE_FORMAT(CURRENT_DATE(), '%d%m%Y'), DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY), '%d%m%Y'))
aby było z zerami wiodącymi?


w zasadzie to część dat mógłbyś przerobić automatycznie, ale jeżeli skypt, który napiszesz trafi na daty nierozwiązywalne (patrz przykłady moje i ddicemana) to będziesz musiał je przepisać... ręcznie... na podstawie innych danych... niestety
ddiceman
trzeba bylo powiedziec, ze jest typu DATE a nie w formacie 'dd.mm.yyyy':
  1. <?php
  2. $zapytanka = "INSERT INTO `time` (`id`,`username`,`time`,`timeto`) VALUES ('','$nickname', CURRENT_DATE(), DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY))";
  3. ?>

  1. DELETE FROM `time` WHERE timeto < CURRENT_DATE();
kayy
Wreszcie winksmiley.jpg Dzięki diceman, poraz enty mi pomogłeś smile.gif

#edit
Jeszcze jedno pytanie... Jak odjąć od siebie timeto i time, tak aby pisało ile dni mi pozostało...?
ddiceman
  1. SELECT DATEDIFF(timeto, CURRENT_DATE()) FROM `time`;
mike
DATEDIFF(expr1,expr2)

~kayy zacznij być samodzielny!
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.