Mysql Sorgusu
-
#Odalar (Tablo)
ID ODAADI
1 ODA1
2 ODA2
3 ODA3#Rezervasyonlar
ID ODAID GIRIS CIKIS
1 1 2021-01-01 2021-01-12
2 1 2021-02-01 2021-02-15
3 2 2021-01-05 2021-01-31
4 1 2021-03-01 2021-03-15
5 3 2021-01-09 2021-02-15
6 3 2021-05-01 2021-05-15
7 2 2021-02-18 2021-02-28
8 1 2021-09-14 2021-10-15
yukarıdaki şekilde mysql tablom var ben tarih aralıgı girerek oda1,2,3 ün kac gün dolu olduğunu sayı olarak listemek istiyorum. bunu nasıl yapabiliriz hocalar?
Liste yaparkende 2021-01-01 ile 2021-01-20 tarihleri arası sorgu yaptıgımda
ODA1 - 12 Gün
....
şeklinde odaların o tarihler arası kac gün dolu olmus nasıl yaparım tşkler.. -
cıkıs > aralık baslangıç
giris < aralik bitis
olanları
topla ( DATEDIFF( eğer(aralik bitis < cıkıs , aralik bitis , cıkıs ) , eğer(aralık baslangıç>giris , aralık baslangıç ,giris) ) )
grupla odaid
-
wert bunu yazdı
cıkıs > aralık baslangıç
giris < aralik bitis
olanları
topla ( DATEDIFF( eğer(aralik bitis < cıkıs , aralik bitis , cıkıs ) , eğer(aralık baslangıç>giris , aralık baslangıç ,giris) ) )
grupla odaid
SUM(DATEDIFF(if('2021-01-01' < cikis, '2021-01-01' , cikis) , if('2021-01-10' > giris , '2021-01-10' ,giris))) topla
bu sekilde denedim ama olmuyor oda1 i - olarak farklı sayılar veriyor..
burda yapmak istediğiim olay söyle oda1,2,3 de rezler var ben bi tarih arası giricem o tarih arasında rez varsa tarih aralıgında saayısını verecek .
-
select oda_id, SUM( DATEDIFF( IF('2021-01-20' < cikis , '2021-01-20' , cikis ) , IF('2021-01-01'>giris , '2021-01-01' ,giris) ) ) from oda where cikis > '2021-01-01' AND giris < '2021-01-20' GROUP BY oda_id
şartları yerleştirdinmi?
büdüt : birde sum+1 koyman gerekebilir bilir çünkü
1'inden 5 kadar kullanılsın oda
5-1 = 4 geçmiş üstünden fakat oda 5 gün kullanılmıştır o yüzden sum tarafına +1 mantıklı olabilir emin olamadım orası senin bileceğin nokta
wert tarafından 09/Nis/21 00:21 tarihinde düzenlenmiştir -
cybermole bunu yazdı
SUM(DATEDIFF(if('2021-01-01' < cikis, '2021-01-01' , cikis) , if('2021-01-10' > giris , '2021-01-10' ,giris))) topla
bu sekilde denedim ama olmuyor oda1 i - olarak farklı sayılar veriyor..
burda yapmak istediğiim olay söyle oda1,2,3 de rezler var ben bi tarih arası giricem o tarih arasında rez varsa tarih aralıgında saayısını verecek .
Kullanımı : DATEDIFF ( datepart , startdate , enddate )
pek anlamam ama yukarıdaki formülde bir eksik var gibi
-
Jinpachi bunu yazdıcybermole bunu yazdı
SUM(DATEDIFF(if('2021-01-01' < cikis, '2021-01-01' , cikis) , if('2021-01-10' > giris , '2021-01-10' ,giris))) topla
bu sekilde denedim ama olmuyor oda1 i - olarak farklı sayılar veriyor..
burda yapmak istediğiim olay söyle oda1,2,3 de rezler var ben bi tarih arası giricem o tarih arasında rez varsa tarih aralıgında saayısını verecek .
Kullanımı : DATEDIFF ( datepart , startdate , enddate )
pek anlamam ama yukarıdaki formülde bir eksik var gibi
başlıkta mysql sorgusu diyore müdür
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_datediff
-
wert bunu yazdı
select oda_id, SUM( DATEDIFF( IF('2021-01-20' < cikis , '2021-01-20' , cikis ) , IF('2021-01-01'>giris , '2021-01-01' ,giris) ) ) from oda where cikis > '2021-01-01' AND giris < '2021-01-20' GROUP BY oda_id
şartları yerleştirdinmi?
büdüt : birde sum+1 koyman gerekebilir bilir çünkü
1'inden 5 kadar kullanılsın oda
5-1 = 4 geçmiş üstünden fakat oda 5 gün kullanılmıştır o yüzden sum tarafına +1 mantıklı olabilir emin olamadım orası senin bileceğin nokta
hocam saolasın oldu..