Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> roznica dat
exar
post 23.01.2007, 20:14:32
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.01.2007

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


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
Go to the top of the page
+Quote Post
Norbas
post 23.01.2007, 22:27:42
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Zastosuj funkcje:
DATEDIFF() - zwraca liczbę dni między datami,
NOW() - zwraca aktualny czas


--------------------
Go to the top of the page
+Quote Post
exar
post 24.01.2007, 05:38:58
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.01.2007

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


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());
Go to the top of the page
+Quote Post
ww-06
post 24.01.2007, 18:08:03
Post #4





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 16.12.2006

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


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());


Ten post edytował ww-06 24.01.2007, 18:11:33
Go to the top of the page
+Quote Post
exar
post 25.01.2007, 05:32:14
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.01.2007

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


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
Go to the top of the page
+Quote Post
ww-06
post 25.01.2007, 11:41:51
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 16.12.2006

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


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ć.

Ten post edytował ww-06 25.01.2007, 11:43:36
Go to the top of the page
+Quote Post
exar
post 25.01.2007, 15:47:34
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.01.2007

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


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

Ten post edytował exar 25.01.2007, 16:35:18
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:36