Autor Zpráva
ondral
Profil
Mohl by mi prosím někdo poradit jak vyřešit tento případ:
Mam v db několik záznámů a u každého datum.
Potřeboval bych aby se mi do sloupce "rozdil" po každém otevření skriptu
zapsal rozdíl mezi dnešním datumem a datumem v db u všech záznamů.

A pak jestliže rozdíl bude např. míň jak 30 (dnů) tak odeslat mail na určitou
adresu, kterou si vybere samozrejmě také z databáze s tim že se zapíše po
odeslání do sloupce "odeslano" hodnota "1" (tím bych zamezil znovu poslání
mailu)

zatím jsem přišel jen jak vypočítat rozdíl:

mysql_connect("$server","$user","$passwd");
mysql_select_db($db);
$vysledek= mysql_query("SELECT * FROM revize"); while
($zaznam=MySQL_Fetch_Array($vysledek)):

$dnes=date("Y-m-d");
$previze=$zaznam["d_pristi_revize"];
endwhile;

$dnesek = strtotime($dnes);
$revize = strtotime($previze);

$rozdil = $revize - $dnesek;
$pocet_dnu = $rozdil / 86400;

Diky za rady
Icka
Profil *
No nevim, možná tomu úplně nerozumim, ale když chci aby se mi provedli scripty s položkama v databázi, které jsou starší (třeba než 30 dnů) tak dám:
mysql_query("select * from tabulka where datum < " . (time() - 2592000));

Sloupec datum ukládám do DBA samozřejmě v unixovém formátu..
SQL dotaz tedy načte všechny záznym starší 30 dnů...
ondral
Profil
v databazi mam sloupce
stroj | datum_revize | rozdil | mail | odeslano
AB1 | 2009-07-07 | ------ | kontakt@mail.cz | hodnota 1 = ano, 0 = ne
AB2 | 2009-09-07 | ------ | kontakt@mail.cz | hodnota 1 = ano, 0 = ne
AB3 | 2009-08-07 | ------ | kontakt@mail.cz | hodnota 1 = ano, 0 = ne

1. Potrebuji aby mi skript vytahl z db vsechny data revizi (datum_revize) a pak je porovnal s dnesnim datumem a rozdil dnu zapsal do sloupce "rozdil".
2. krok by skript zkontroloval jestli ve sloupci "rozdil" je cislo mensi nebo rovno 30 a pokud ano tak by poslal na mail z db upozorneni a zapsal hodnotu 1 do sloupce "odeslano". Podminka by byla aby mail poslal pouze v pripade ze ve sloupci "odeslano" je 0 jinak by mail neposlal.
BetaCam
Profil
Jen tak v rychlosti. Pro spočítání počtu dnů do revize bych asi nepoužil PHP, ale spočítal bych to rovnou v MySQL dotazu. Tedy například takhle.

SELECT stroj, datum_revize, mail, odeslano, DATEDIFF( datum_revize, NOW( ) ) AS dnu_do_revize
FROM revize


Přijde mi to elegantnější.
Zaprvé nemusim v DB uchovávat sloupec "rozdil" ( přijde mi absolutně k ničemu )
Zadruhé nemusim v PHP "složitě" vypočítávat počet dnů do revize
________________________________________________________________

V PHP by pak měl stačit (pokud se nepletu) jeden cyklus a jedna podmínka tedy neco jako

mysql_connect("$server","$user","$passwd");
mysql_select_db($db);
$vysledek= mysql_query("SELECT stroj, datum_revize, mail, odeslano, DATEDIFF( datum_revize, NOW( ) ) AS dnu_do_revize
FROM revize");
while ($row = mysql_fetch_object($vysledek))
{
if ($row->dnu_do_revize < 30 AND $row->odeslano == 0)
{
//...
// Sestavení mailu + update sloupce ODESLANO
//...
}
}


Takže asi tak nějak :) Jinak je to psané z hlavy takže bych to bral s rezervou.
ondral
Profil
Diky moc za rady, konecne jsem se dobral pozitivniho vysledku za vasi pomoci :)
Udelal jsem to podle tebe BetaCam, diky
Toto téma je uzamčeno. Odpověď nelze zaslat.