Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prikaz cene Between dva datuma

[es] :: MySQL :: Prikaz cene Between dva datuma

[ Pregleda: 2763 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.static.madnet.rs.



+7 Profil

icon Prikaz cene Between dva datuma12.02.2016. u 10:33 - pre 99 meseci
Drustvo imam mali problem oko procedure koju pravim za app koja je za renta kar.

Covek ima dve vrste cena (Sezonske cene i van sezonske cene)

Ja sam napravio tablelu sezone gde upisujem ime sezone i pocetak kraj. Pomocu pocetka i kraja i izabranih datuma od strane korisnika ja utvrdjujem
cenu i prikazujem je. Treba da se prikaze cena za taj neki period

Sezone

Code:
ID_Sezone     Pocetak     Kraj            Naziv_Sezone_Sr   Naziv_Sezone_En  Naziv_Sezone_Ru  
---------    ----------    ----------   ---------------     ---------------  -----------------
1              2016-05-01   2016-08-31  Sezonka              (NULL)                 (NULL)           
2              2016-09-01   2016-12-31  Vansezonska        (NULL)                 (NULL)      



Cene sezona

Code:

    ID    Cena  ID_Sezone  ID_Automobila  
------  ------  ---------  ---------------
     1     150          1                1
     2     120          2                2
     3      70          1                3
     4      60          1                4
     5     220          2                5
     6     457          2                6           


Ova gornja tabela cene sezona upisuje id sezone i cenu za svaki automobil. Svako vozilo ima svoju cenu.

Evo procedure

Code:
DELIMITER $$
DROP PROCEDURE IF EXISTS `izracunajCenu`$$
CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `panauto_site`.`izracunajCenu`(pocetak DATE, kraj DATE)
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
    
    SELECT a.name, s.Naziv_Sezone_Sr, c.Cena
    FROM cene_sezona c
    INNER JOIN sezone s ON s.ID_Sezone = c.ID_Sezone
    INNER JOIN automobili a  ON a.ID = c.ID_Automobila
    WHERE s.Pocetak <= pocetak AND s.Kraj >= kraj BETWEEN s.Pocetak AND s.Kraj;
    
    END$$

DELIMITER ;


E sada kada pozovem:

CALL izracunajCenu('2016-05-01','2016-08-31');

dobijem listu:
Code:

name        Naziv_Sezone_Sr    Cena  
----------  ---------------  --------
Opel Corsa  Sezonka               150
VW Polo     Sezonka                70
Fiat Bravo  Sezonka                60


A ako ukucam CALL izracunajCenu('2016-08-01','2016-09-31'); ja i dalje dobijam lisu sa sezonskim cenama.
Nesto ja ovde u WHERE nisam uradio kako treba i on mi na osnovu unesenog datuma ne filtrira kako treba.


Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

Orome
programer

Član broj: 273201
Poruke: 115
193.17.204.*



+1 Profil

icon Re: Prikaz cene Between dva datuma12.02.2016. u 12:04 - pre 99 meseci
koliko vidim WHERE uslov ti treba izgledati ovako

SELECT a.name, s.Naziv_Sezone_Sr, c.Cena
FROM cene_sezona c
INNER JOIN sezone s ON s.ID_Sezone = c.ID_Sezone
INNER JOIN automobili a ON a.ID = c.ID_Automobila
WHERE s.Pocetak <= pocetak AND s.Kraj >= kraj ;

ako imas 2 datuma kao sto imas pocetak i kraj onda ne moze BETWEEN.

between se koristi kad imas jednu kolonu datuma i hoces select na osnovu te kolone sa parametrima pocetak i kraj, to bi izgledalo ovako

WHERE (datumska_kolona BETWEEN '2016-05-01' AND '2016-08-31') tj WHERE (datumska_kolona BETWEEN pocetak AND kraj)
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Prikaz cene Between dva datuma12.02.2016. u 12:04 - pre 99 meseci
Šta znače početak i kraj koji korisnik unosi? Šta ako početak i kraj nisu u istoj sezoni?

BTW nije mi jasno zašto praviš stored proceduru kad je u pitanju običan query.
 
Odgovor na temu

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.static.madnet.rs.



+7 Profil

icon Re: Prikaz cene Between dva datuma12.02.2016. u 12:40 - pre 99 meseci
@Orome
Ma nece probao sam i ja to. Evo kada copy paste tvoj primer i unesem

Code:
CALL izracunajCenu('2016-09-01','2016-09-21');
vracam mi NULL a trebaobi da prikaze van sezonsku cenu
Code:
CALL izracunajCenu('2016-05-01','2016-06-21');  
vraca mi sezonsku cenu


@jablan koristim proceduru zato sto je to samo deo koda i mnogo mi je lakse na ovom projektu da nesto izmenim u bazi nego da se cimam da jurim entitete po kodu...
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.static.madnet.rs.



+7 Profil

icon Re: Prikaz cene Between dva datuma12.02.2016. u 12:48 - pre 99 meseci
------------------ Update ------------

@Orome tvoj primer je dobar samo sto sam ja promenio
Code:
    WHERE (a.ID = vozilo) AND (s.Pocetak >= pocetak AND s.Kraj >= kraj) ;    

i sada radi prikazuje kako treba. Sada sam ja samo prosledio jos jedan parametar za vozilo sto je nebitno bilo cisto da vas ne zbuni.
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

[es] :: MySQL :: Prikaz cene Between dva datuma

[ Pregleda: 2763 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.