Autor Zpráva
starburst
Profil
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
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
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
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
neni to NOW()
Taps
Profil
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
TSD: Den má 86400 sekund

Evidentne jsi se jeste nesetkal s problemem letniho/zimniho casu...
TSD
Profil
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
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
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
na netu jsem našel format zapisu
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
ale nevim co to je za zapis...jestli to je zapis pro vybrani dat z databaze - asi jo...coz je logicke kdyz je to fce mysql ale potřeboval bych to zapsat jako funkci aby to udelalo to, že to vezme tu promennou $doba ktera obsahuje cislo a ulozi do nej datum zvysene o pocet dni $doba a ne vytahovat cosi z databaze...

myslel jsem takle ale nefunguje to:

$doba = 20;
$doba = "date_add(now(), interval $doba day)"; 


porad to uklada samy nuly... poradte nekdo...
Kajman_
Profil *
Tak ukažte celý insert.
starburst
Profil
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 *
$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
wow!!! Kajmane ses borec... už to frčí

díky moc
starburst
Profil
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 *
A ten sloupeček se jmenuje doba nebo date_ukonceni?
starburst
Profil
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 *
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
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 *
Sloupce se neuvozují znakem $, tím se v php uvozují proměnné!!!
starburst
Profil
jasny :-) sory...ale v tom priklade to mam bez tech dolaru...
starburst
Profil
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...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0