[ adaxx @ 16.12.2012. 23:43 ] @
Treba mi malo pomoci oko mysql, radi se o formularu za narucivanje, ovako:

kada korisnik izabere datum pa onda vreme skripta treba da proveri u bazi koliko ima porudzbina za taj isti datum, isto vreme, i 30 min kasnije i 30 min ranije, znaci treba mi COUNT za vreme koje korisniki unese +- 30min

za tacan datum i vreme bi bilo ovako:

Code:

SELECT COUNT(datum)
FROM porudzbine
WHERE datum = '{datum}' and vreme = '{vreme}'";


{datum} i {vreme} je polje u formularu

kako da napravim da mi izracuna COUNT za +- 30min od vreme koje korisnik ubaci {vreme}?

Hvala unapred
[ bogdan.kecman @ 17.12.2012. 09:54 ] @
zasto datum i vreme drzis odvojeno?

http://dev.mysql.com/doc/refma...n/date-and-time-functions.html

select count(*) from t1 WHERE datetimepolje BETWEEN setovandatum - interval 30 minutes AND setovandatum + interval 30 minutes;

tako nemas problem oko ponoci, mozes da imas where datum = setovandatum and time between vreme - interval 30 imnutes and vreme + interval 30 minutes ali ovde imas problem oko ponoci tako da to ne valja, ako bas hoces da ih drzis odvojeno onda ih prvo spojis pa napravis datetime pa onda kako sam ti rekao na pocetku, ali realno nemas razloga da to drzis u dva polja
[ bogdan.kecman @ 17.12.2012. 09:55 ] @
oko direktnog ubacivanja vrednosti iz formulara u sql pitaj malo tamo na php forumu, to se ne radi tako!
[ adaxx @ 17.12.2012. 13:26 ] @
Na zalost datum i vreme su odvojeno u bazi, probao sam ovako nesto ali opet ne ide, uvek mi izbaci 0:

Code:
$check_sql = "SELECT COUNT(*)"
   . " FROM bestellungen"
       . " WHERE abholdatum = '2012-02-03' AND abholzeit BETWEEN '17:30:00' - INTERVAL 30 MINUTE AND '17:30:00' + INTERVAL 30 MINUTE";

sc_lookup(rs, $check_sql);

if (isset({rs[0][0]}))     // Row found
{
    {test} = {rs[0][0]};
}
        else     // No row found
{
            {test} = '0';
}
$test = {test};
echo "$test";
[ bogdan.kecman @ 17.12.2012. 14:12 ] @
zaboravih, ne moze INTERVAL na TIME, moze samo na DATETIME .. jbg losa ti je ideja da drzis to odvojeno .. bas losa ..

uradi TIME_TO_SEC()

WHERE abholdatum = '2012-02-03' AND abholzeit BETWEEN TIME_TO_SEC('17:30:00') - 180 AND TIME_TO_SEC('17:30:00') + 180

no opet, ne zaboravi, oko ponoci imas problem!! ako nije kasno, promeni strukturu baze i spoj ta dva polja
[ adaxx @ 17.12.2012. 14:34 ] @
na zalost ne radi ni ovo:

Code:
 WHERE abholdatum = '2012-02-03' AND abholzeit BETWEEN TIME_TO_SEC('17:30:00') - 180 AND TIME_TO_SEC('17:30:00') + 180


da li ja mogu nesto pre ovoga kao na primer da spojim abholungdate i abholzeit, npr. preko concat ili slicno ?
[ Predrag Supurovic @ 17.12.2012. 14:40 ] @
SQL funkcija TIMESTAMP() može da primi kao parameter datum i vreme pa da napravi timestamp. Može i to da posluži u nuždi.
[ bogdan.kecman @ 17.12.2012. 14:52 ] @
koliko ti se to cesto poziva, i koliko je velika ta tabela, imaces ogromne probleme sa tim zato sto ce da bude strasno sporo.. spoj ta dva polja u jedan
[ adaxx @ 17.12.2012. 15:25 ] @
Pronasao sam jedan nacin samo ne znam koliko je ovo dobro, verovatno ima jednostavnijih nacina, ovde prvo pretvorim u sekunde, zatim dodam +- 900 sekundi pa onda opet pretvorim u time, ali radi odlicno:
u ovom slucaju mi selektuje sve izmedju 16:55:00 i 17:25:00
Code:
{abholzeit} = "17:10:00";


function time_to_sec($time) {
    $hours = substr($time, 0, -6);
    $minutes = substr($time, -5, 2);
    $seconds = substr($time, -2);

    return $hours * 3600 + $minutes * 60 + $seconds;
}

$vreme=time_to_sec({abholzeit});
$vrememinus = $vreme - 900;
$vremeplus = $vreme + 900;

$vremestart = gmdate("H:i:s", $vrememinus);
$vremeend = gmdate("H:i:s", $vremeplus);

$check_sql = "SELECT COUNT(*)"
   . " FROM bestellungen"
       . "  WHERE abholdatum = '2012-02-03' AND abholzeit <= '$vremeend'  AND abholzeit >= '$vremestart'";

sc_lookup(rs, $check_sql);

if (isset({rs[0][0]}))     // Row found
{
    {test} = {rs[0][0]};
}
        else     // No row found
{
            {test} = '0';
}
$test = {test};
echo "$test";



hocu vase misljenje da li je preporucljivo da se ovako ostavi
[ bogdan.kecman @ 17.12.2012. 21:07 ] @
ne
[ Boris_ZR @ 17.12.2012. 22:30 ] @
Zašto ne poslušaš čoveka, sve ti je lepo objasnio?