• 03-04-2014, 10:41:59
    #1
    Merhabalar, başlıktan da anlaşılacağı üzere bir Proje üzerinde çalışıyorum ve belli kriterleri olan bir filtreleme kısmında sıkıntı yaşamaktayım. Aşağıda tablolarımı resim olarak ekledim ki daha anlaşılır olsun.

    Kısaca konsept : Elektrikli araba kiralama sistemi (Car sharing). Bu sistemde arabalar kısa mesafeler ve kısa süre zarfları için kiralanabiliniyor. Yani bir araba 1 gün içerisinde 10 kere kiralanabilinir. (örnek : çarşıya gidip alışveriş yapacağım 1 saat kiralıyorum, daha sonra başkası 100 km yola gidecek aynı aracı 3 saatliğine kiralıyor.)


    Yapmaya çalıştığım : Araba sorgulama ekranına girildiğinde aktuel olan ayı içeren bir takvim gösterilecek ve burada hergün için ayrılan kutuda o gün için kaç arabanın kiralanabilir olduğu görünecek. Yani bir araba 23 saat 30 dakika kiralanmış dahi olsa yarım saat daha kiralanabilir olduğundan dolayı gösterilmesi lazım.

    Aklıma gelen çözüm : Rezervasyon tablosunda bulunan bütün arabaID lerini alıp sonra gelen IDler için teker teker her arabayı kontrol etmek (kiralanmış süre 24 saatten azmı ). Bu yöntem bana efektif bir çözüm olmayacak gibi geldi ve başka nasıl çözebilirim diye düşünmeye başladım ki hala düşünüyorum .

    Çözümümdeki sıkıntı : : Araba(lar) bir günden daha uzun kiralanabiliniyor. Dolayısıyla 2 nisan 23:00 dan 4 nisan 20:00 ye kadar kiranlamış bir araçta Time(DateFrom)- Time(DateTo) yaptığımda 45 saat geri dönecek ve aracın kiralanma günü olan 2 nisanda sanki 45 saat yani >=24 olacağından dolayı listelenmiyor olacak.
    Araba tablom :


    Rezervasyon Tablom:



    Eğer bir kişi daha önce buna benzer bir sıkıntı ile karşılaşmış ve işin mantığını oturtabilmişse sadece işi kolaylaştırabilecek bir fikir belirtirse çok sevinirim. Maalesef 2 gündür kafayı yorduğum için fikrim sabitlenmiş gibi (Başka pencereden bakamıyorum).
  • 04-04-2014, 00:17:41
    #2
    Alıntı
    Çözümümdeki sıkıntı : : Araba(lar) bir günden daha uzun kiralanabiliniyor. Dolayısıyla 2 nisan 23:00 dan 4 nisan 20:00 ye kadar kiranlamış bir araçta Time(DateFrom)- Time(DateTo) yaptığımda 45 saat geri dönecek ve aracın kiralanma günü olan 2 nisanda sanki 45 saat yani >=24 olacağından dolayı listelenmiyor olacak.
    burada anlayamadığım şey zaten 4 nisan 20:00 ye kadar kiralanmışsa neden listelenmesini istediğindir, birşeyi eksik anlatmışsın sanırım oda listelenme tarihini örnek vermek olacak. bu listeleme 2 nisanda yapılırsa benim dediğim gibi zaten listememeli, 5 nisanda yapılırsa, kiralanma süresi bittiğinden listelenmelidir. biraz daha açarmısın bu kısmı

    edit :

    select TIMESTAMPDIFF(HOUR,z.DateFrom,z.DateTo),CarID from rez as z WHERE TIMESTAMPDIFF(HOUR,z.DateFrom,z.DateTo) <=13

    belki bu sorgudan birşey çıkartabilirsin dediğim gibi sorunu tam anlamadım, ancak n ≡ 0 (mod 24) tarzı birşeye ihtiyaç duyuyor gibisin

    http://stackoverflow.com/questions/1...e-is-some-null