Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: roznica dat
Forum PHP.pl > Forum > Bazy danych > MySQL
exar
witam
Napewno ktos po przeczytaniu posta zarzuci ze takie tematy byly i nie chce mi sie szukac, ale uprzedzajac: szukalem ale jakos nie moge sobie z tym poradzic. kombinowalem roznymi metodami

Mam tabelke
CREATE TABLE `katalog` (
`adres` varchar(50) NOT NULL default '',
`tytul` varchar(100) NOT NULL default '',
`opis` varchar(100) default NULL,
`kat` int(11) NOT NULL default '0',
`email` varchar(60) NOT NULL default '',
`data` date default '0000-00-00',
`stan` int(11) NOT NULL default '0',
PRIMARY KEY (`adres`)
) TYPE=MyISAM;

i musze porownac aktualny czas z komorka data i jesli roznica wieksza lub rowna 10 dni to wyswietla wyniki ewentualnie zmienia wartos komorki stan

z gory dziekuje
Norbas
Zastosuj funkcje:
DATEDIFF() - zwraca liczbę dni między datami,
NOW() - zwraca aktualny czas
exar
tego tez probowalem ale jakos nic mi nie chce dzialac. Probowalem tak

  1. mysql_query("UPDATE katalog SET stan='1' WHERE DATEDIFF(CURDATE(), data) >= '10' ") OR die(mysql_error());


ale wywala blad a jak warunek po where wezme w klamry to nie pokazuje bledu ale nic nie zmienia w bazie

  1. mysql_query("UPDATE katalog SET stan='1' WHERE 'DATEDIFF(CURDATE(), data) >= 10' ") OR die(mysql_error());
ww-06
Cytat(exar @ 24.01.2007, 05:38:58 ) *
tego tez probowalem ale jakos nic mi nie chce dzialac. Probowalem tak

  1. mysql_query("UPDATE katalog SET stan='1' WHERE DATEDIFF(CURDATE(), data) >= '10' ") OR die(mysql_error());


ale wywala blad a jak warunek po where wezme w klamry to nie pokazuje bledu ale nic nie zmienia w bazie

  1. mysql_query("UPDATE katalog SET stan='1' WHERE 'DATEDIFF(CURDATE(), data) >= 10' ") OR die(mysql_error());

może tak:
  1. mysql_query("UPDATE katalog SET stan='1' WHERE DATEDIFF(CURDATE(), data) >= 10 ") OR die(mysql_error());


przecież to jest liczba a nie string... a jeśli już to raczej w nawiasy:
  1. mysql_query("UPDATE katalog SET stan='1' WHERE (DATEDIFF(CURDATE(), data) >= 10) ") OR die(mysql_error());


pamiętaj że:
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
-> -31

więc może przed nawias wstawić jeszcze funkcję ABS ?
  1. mysql_query("UPDATE katalog SET stan='1' WHERE ABS(DATEDIFF(CURDATE(), data)) >= 10 ") OR die(mysql_error());
exar
zrobilem tak:

  1. mysql_query("UPDATE katalog SET stan=1 WHERE DATEDIFF(CURDATE(), data) >= 1 ") OR die(mysql_error());


i z nawiasami jak pisales ale wywala blad

Something is wrong in your syntax obok '(CURDATE(), data) >= 1' w linii 1
ww-06
Cytat(exar @ 25.01.2007, 05:32:14 ) *
zrobilem tak:

  1. mysql_query("UPDATE katalog SET stan=1 WHERE DATEDIFF(CURDATE(), data) >= 1 ") OR die(mysql_error());


i z nawiasami jak pisales ale wywala blad

Something is wrong in your syntax obok '(CURDATE(), data) >= 1' w linii 1


Otwórz sobie phpmyadmina,
ja przed chwilą utworzyem dokładnie taką bazę z polami data i stan i zapytanie:
  1. UPDATE katalog SET stan = '2' WHERE ABS( DATEDIFF( CURDATE( ) , DATA ) ) >=10

identycznie działa:
  1. UPDATE katalog SET stan =3 WHERE ABS( DATEDIFF( CURDATE( ) , DATA ) ) >=10

daje pozytywny rezultat np.: Zmodyfikowanych rekordów: 1 (Wykonanie zapytania trwało 0.0149 sekund(y))
więc błąd masz nie w zapytaniu, ale gdzieś na połączeniu z bazą, albo gdzieś nawstawiałeś za dużo/za mało znaków '' "" itd.
Phpmyadmin bardzo ładnie pozwala nauczyć się wykonywania zapytań i zanim je włożysz do programu możesz tam na sucho przetestować.
exar
zrobilem jak mowiles ale dalej nie dzialalo wiec poszukalem i znalazlem:
DATEDIFF() was added in MySQL 4.1.1. czyli chyba znalazlem przyczyne smile.gif
ale jak to zrobic w inny sposob aby bylo zgodne z moja wersja?

EDIT
Sprobowalem funkcji z ktora wczesniej mialem problemy i teraz pieknie smiga smile.gif
  1. UPDATE katalog SET stan = 1 `katalog` WHERE TO_DAYS( CURDATE() ) - TO_DAYS(DATA) > 10;


thx za pomoc
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-2024 Invision Power Services, Inc.