Autor | Zpráva | ||
---|---|---|---|
starburst Profil |
#1 · Zasláno: 20. 6. 2008, 21:37:40
zdravím. řeším problém jak udělat u přízpěvku datum vypršení...
vím jak na to matematicky ale nevím jaky použít funkce. potřeboval bych funkci, která mi přičte k aktuálnímu datu určitý počet dní - tzn uživatel zadá přízpěvek a zadá dopa platnosti 20 dni, při uložení do databaze se ulozi aktualni datum, vzkaz a potrebuji funkci ktera mi pri ukladani do databaze pricte k aktualnimu datu ten počet dni a ulozi zase ve formatu date aby to slo vzajemne porovnavat. diky |
||
TSD Profil |
#2 · Zasláno: 20. 6. 2008, 21:40:24
starburst
Když budeš čas vložení ukládat v unix formátu, tak je to triviální záležitost. Den má 86400 sekund. |
||
TSD Profil |
#3 · Zasláno: 20. 6. 2008, 21:43:18
ech, až teď vidím, že to chceš ukládat ve formátu date. Máš pro to nějaký vážný důvod? Myslím že existují funkce, které umí počítat rozdíl časů, když je v tomto formátu, ale proč si to tím komplikovat?
|
||
starburst Profil |
#4 · Zasláno: 20. 6. 2008, 23:17:37
no uz jsem vygooglil fci ktera to umi... pro ty kteri resi stejny problem je to fce
date_add('nejake_datum',INTERVAL pocet DAY); poradte mi prosím jak mám formulovat select z databáze když chci aby to vyhodilo 2 záznamy který jsou nejnovějsí a nemají proslou platnost: asi by to mělo byt nejak takle: SELECT * FROM tabulka WHERE date_aktualni>=date_ukonceni ORDER BY date_vlozeni DESC LIMIT 2 ale nevím jak napsat aby to date_aktualni vzalo aktuální systémový čas v case dotazu... nevíte někdo? diky |
||
Medvídek Profil |
#5 · Zasláno: 20. 6. 2008, 23:24:00
neni to NOW()
|
||
Taps Profil |
#6 · Zasláno: 21. 6. 2008, 00:07:35 · Upravil/a: Taps
starburst
zkus to takto SELECT * FROM tabulka WHERE date_aktualni>=date_sub(NOW(), interval 20 day) ORDER BY date_vlozeni DESC LIMIT 2 |
||
ninja Profil |
#7 · Zasláno: 21. 6. 2008, 00:14:31
TSD: Den má 86400 sekund
Evidentne jsi se jeste nesetkal s problemem letniho/zimniho casu... |
||
TSD Profil |
#8 · Zasláno: 21. 6. 2008, 01:44:50
ninja
Evidentne jsi se jeste nesetkal s problemem letniho/zimniho casu... Už jsem o tom něco slyšel. Má to nějaký vliv na unixtime = počet uplynulých sekund od půlnoci na 1.1.1970? |
||
starburst Profil |
#9 · Zasláno: 21. 6. 2008, 11:04:38 · Upravil/a: starburst
at to zkousim jakkoliv tak mi to nebere tu syntaxi... zkousel jsem prevest cislo zadane ve formulari jeste pred vlozenim do databaze predelat na datum o to cislo vetsi a pak je porovnavat mezi sebou taky jsem zkousel ulozit to jako cislo a provest tu fci pri volani z databaze ale nebere mi to tu funkci date_add() kdyz ju vyvolam pred ulozenim do databaze aby mi to predelala tak mi to ulozi do dazabaze 0000-00-00 00:00:00 což je deafultni nastaveni pole DATETIME coz je format radku v databazi a kdyz to volam pri vyberu z databaze tak jak to pise Taps tak mi to vyhodi chybu
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOW()>=date_add('date',INTERVAL doba DAY) LIMIT 2' at line 1 dokonce jsem zkousel misto NOW() napsat CURDATE() ale stejny vysledek... nevite nekdo jak s tim pohnout? |
||
Kajman_ Profil * |
date_add použijte jen při ukládání záznamu (do sloupečku typu date nebo datetime),
date_add(now(), interval 20 day) při vybírání pak stačí skoro to, co jste psal SELECT * FROM tabulka WHERE date_ukonceni>=now() ORDER BY date_vlozeni DESC LIMIT 2 |
||
starburst Profil |
#11 · Zasláno: 21. 6. 2008, 21:30:28
no ale jak napsat
$doba = 20; date_add(now(), interval $doba day); nebo jak to zapsat... myslim ze sem vyzkousel vsechno ale nic mi nefunguje... zkousel jsem zapis s uvozovkami i s apostrofama ale porad mi to uklada do databaze 0000.00.00 00:00:00 v databazi mam to pole ve dormatu datetime |
||
starburst Profil |
#12 · Zasláno: 22. 6. 2008, 09:33:22 · Upravil/a: starburst
na netu jsem našel format zapisu
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); myslel jsem takle ale nefunguje to: $doba = 20; $doba = "date_add(now(), interval $doba day)"; porad to uklada samy nuly... poradte nekdo... |
||
Kajman_ Profil * |
#13 · Zasláno: 22. 6. 2008, 10:20:07
Tak ukažte celý insert.
|
||
starburst Profil |
#14 · Zasláno: 23. 6. 2008, 23:16:11
no skousel jsem fakt uz snad vsechno... vzhledem k tomu ze je to mysql funkce tak sem zacal takto:
if(count($HTTP_POST_VARS)) { $vzkaz = $_POST['vzkaz']; $doba = $_POST['doba']; } /* Ziskani datumu */ $date = Date("Y-m-d H:i:s"); /* vlozeni zaznamu do databaze */ if ($_POST['vzkaz'] !="") { $tabulka = "nastenka"; $dotaz = "INSERT INTO $tabulka VALUES ('$date','DATE_ADD(NOW(),INTERVAL $doba DAY)','$vzkaz')"; mysql_query($dotaz) or die("Error: DB pridat!: ".mysql_error()); }; neháže to zadnou chybu ale opet to vlozi jen samy nuly... tak sem pak zkousel i if(count($HTTP_POST_VARS)) { $vzkaz = $_POST['vzkaz']; $doba = $_POST['doba']; } /* Ziskani datumu */ $date = Date("Y-m-d H:i:s"); /* Ziskani datumu vyprseni */ $doba = DATE_ADD(NOW(),INTERVAL $doba DAY); /* vlozeni zaznamu do databaze */ if ($_POST['vzkaz'] !="") { $tabulka = "nastenka"; $dotaz = "INSERT INTO $tabulka VALUES ('$date','$doba','$vzkaz')"; mysql_query($dotaz) or die("Error: DB pridat!: ".mysql_error()); }; ale ani toto nehaze chybu pouze vlozi samy nuly... tak jsem zkousel ulozit to jako normalni cislo a provest ten prikaz pri vytahovani dat z databaze: $dotaz = "SELECT * FROM $tabulka ORDER BY date DESC WHERE date>=SUBDATE(NOW(),INTERVAL doba DAY) LIMIT 2"; $vysledek = mysql_query($dotaz) or die("Error: DB show!".mysql_error()); $dotaz = "SELECT * FROM $tabulka ORDER BY date DESC WHERE NOW()>=DATE_ADD(NOW(),INTERVAL doba DAY) LIMIT 2"; $vysledek = mysql_query($dotaz) or die("Error: DB show!".mysql_error()); ale ani toto nefunguje... toto mi vyhazuje oboji tu chybu : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOW()>=date_add('date',INTERVAL doba DAY) LIMIT 2' at line 1 takze uz fakt nevim :-( |
||
Kajman_ Profil * |
#15 · Zasláno: 24. 6. 2008, 08:51:43
$dotaz = "INSERT INTO $tabulka VALUES ('$date','DATE_ADD(NOW(),INTERVAL $doba DAY)','$vzkaz')";
Jenže takhle tam vkládáte string 'DATE_ADD(NOW(),INTERVAL $doba DAY)', zmizněte ty uvozovky nebo je dejte jen kolem $doba. |
||
starburst Profil |
#16 · Zasláno: 24. 6. 2008, 10:21:17 · Upravil/a: starburst
wow!!! Kajmane ses borec... už to frčí
díky moc |
||
starburst Profil |
#17 · Zasláno: 24. 6. 2008, 14:27:37
lidi je mi to trapny ale nemuzu prijit na to jak to zase zpetne vytahnout z te databaze... nevidite v tom nekdo chybu? nevyhazuje to nic ale nic to nenapise i kdyz je tabulka obsazena i kdyz je prazdna.
$dotaz = "SELECT * FROM $tabulka WHERE doba>NOW() ORDER BY date DESC LIMIT 2"; $vysledek = mysql_query($dotaz) or die("Error: DB show!".mysql_error()); $pocet = "SELECT COUNT(vzkaz) FROM $tabulka WHERE doba>=NOW() LIMIT 2"; if ($pocet == "0") { echo 'zadny zaznam</td><td width=/"203/" height=/"199/" align=/"left/" valign=/"top/">taky zadny zaznam'; } elseif ($pocet == "1") { $text='<b>'.$date.'</b> <p>'.$vzkaz.'</p></td> <td width="203" height="199" align="left" valign="top">nalezen pouze jeden zaznam - zobrazuje se vlevo'; echo $text; } else { for($i=0; $i<$pocet; $i++): $date = mysql_Result($vysledek, $i, "date"); $vzkaz = mysql_Result($vysledek, $i, "vzkaz"); $doba = mysql_Result($vysledek, $i, "doba"); if($i == 0) { $text=' <b>'.$date.'</b> <p>'.$vzkaz.'</p></td> <td width="203" height="199" align="left" valign="top">'; } if($i == 1) { $text2 ='<b>'.$date.'</b> <p>'.$vzkaz.'</p>'; } echo $text,$text2; endfor; } ?> zkousel sem jenom vypsat co mi to vytahne z databaze ale ani to nevypsalo nic... takze opet nevim kde delam chybu |
||
Kajman_ Profil * |
#18 · Zasláno: 24. 6. 2008, 14:59:05
A ten sloupeček se jmenuje doba nebo date_ukonceni?
|
||
starburst Profil |
#19 · Zasláno: 24. 6. 2008, 15:47:36
mam tam promenne $datum - uloži se aktualni datum vlozeni prizpevku,
$doba - ulozi se datum vypršeni prizpevku $vzkaz - vzkaz tam to bylo jenom popsany aby to bylo jasny co tim myslim... |
||
Kajman_ Profil * |
#20 · Zasláno: 24. 6. 2008, 21:21:07
V tom dotaze žádné proměnné nejsou třeba! Je tam důležitá struktura tabulky... jestli nemáte překlep v názvu sloupce.
|
||
starburst Profil |
#21 · Zasláno: 25. 6. 2008, 10:02:45
nene... preklep tam urcite neni... musi to byt nejaka logicka nebo syntakticka chyba... kontroloval jsem znovu a nazvy sloupcu mam dobre... jeste teda upresnim... sloupec $date a $doba má strukturu DATETIME, sloupec $vzkaz má strukturu VARCHAR a v databazi mam ulozeny data uz spravne - tzn ve vzkazu mam nejaky text a v obou datech mam tadum ve formatu např. 2008-06-22 22:20:05 a druhy datum (sloupec $doba) je datum o nějaký den den navýšený...
potřebuji aby mi ten dotaz vyhodil 2 záznamy které vyhovují té podmínce... nevyhazuje mi to nic:-( |
||
Kajman_ Profil * |
#22 · Zasláno: 25. 6. 2008, 10:25:24
Sloupce se neuvozují znakem $, tím se v php uvozují proměnné!!!
|
||
starburst Profil |
#23 · Zasláno: 25. 6. 2008, 18:32:47
jasny :-) sory...ale v tom priklade to mam bez tech dolaru...
|
||
starburst Profil |
#24 · Zasláno: 25. 6. 2008, 21:14:35
už jsem na to přišel... nechapu jak to nebo proc ale prvni musi byt v dotazu to NOW() a až pak doba - tzn NE WHERE doba>NOW() ale NOW()<doba a už to frčí... akorad to absolutne nechapu proc to tak je...
|
||
Časová prodleva: 16 let
|
0