lostyazilim
tr.link

sql between ile tarihe göre arama sorunu

19 Mesajlar 2.632 Okunma
lstbozum
tr.link

murattkilinc murattkilinc www.instegral.com Kullanıcı
  • Üyelik 06.04.2016
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İzmir
  • Ad Soyad M** K**
  • Mesajlar 119
  • Beğeniler 7 / 15
  • Ticaret 0, (%0)
Workbench ile sorguyu direkt olarak veritabanında deniyorum fakat boş bir sorgu ekranı ile karşılaşıyorum (echo ile aynı)
Senin tavsiyen ile yaptığım düzeltmeyle birlikte sorgunun tamamı bu şekilde.

SELECT
`name`,
`surname`,
`department_name`,
DATE_FORMAT(`grad_date`, '%d %b %Y') AS grad_date,
`grad_type_name`,
`firm_name`,
`email`,
`academic_name`,
`work_status`
FROM
mebis.Alumni,
mebis.UnitDepartment,
mebis.AlumniAcademicInfo,
mebis.AlumniGradType,
mebis.AlumniJobInfo,
mebis.UnitAcademic,
mebis.WorkStatus,
mebis.AlumniEducationType
WHERE
AlumniAcademicInfo.alumni_id = Alumni.alumni_id
AND AlumniAcademicInfo.department_id = UnitDepartment.department_id
AND AlumniAcademicInfo.grad_date IS NOT NULL
AND AlumniAcademicInfo.university_id = 1
AND AlumniAcademicInfo.grad_type_id = AlumniGradType.type_id
AND AlumniJobInfo.alumni_id = AlumniAcademicInfo.alumni_id
AND AlumniJobInfo.work_status = WorkStatus.status_id
AND AlumniAcademicInfo.faculty_id = UnitAcademic.academic_id
AND AlumniAcademicInfo.education_type = AlumniEducationType.id
AND AlumniAcademicInfo.grad_type_id LIKE '%%'
AND AlumniAcademicInfo.faculty_id LIKE '%%'
AND AlumniAcademicInfo.department_id LIKE '%%'
AND Alumni.name LIKE '%%'
AND Alumni.surname LIKE '%%'
AND AlumniJobInfo.work_status LIKE '%%'
AND AlumniAcademicInfo.education_type LIKE '%%'
AND (AlumniAcademicInfo.grad_date >= '2017-12-12%' AND AlumniAcademicInfo.grad_date <= '%')
ORDER BY Alumni.alumni_id

Mesela bu sorguda 2017-12-12 tarihinden sonra mezun olmuş olan 4 kişinin gelmiş olması lazım yetkilibiri
 

 

www.instegral.com
wmaraci
reklam

yetkilibiri yetkilibiri Yazılım Uzmanı Kullanıcı
  • Üyelik 28.05.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İstanbul Avrupa
  • Ad Soyad E** Y**
  • Mesajlar 107
  • Beğeniler 41 / 41
  • Ticaret 2, (%100)
murattkilinc

Tarih aralığındaki bitiş verisine düzgün değer gelmemiş.
Ve oradaki % işaretlerini kaldırabilirsin.

'YYYY-AA-GG' şeklinde sıkıntısız çalışacaktır. Tabi DB tarafında AlumniAcademicInfo.grad_date isimli alanın STRING olmadığını varsayıyorum.

İlgili alan DATETIME formatında mı ?
 

 

murattkilinc murattkilinc www.instegral.com Kullanıcı
  • Üyelik 06.04.2016
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İzmir
  • Ad Soyad M** K**
  • Mesajlar 119
  • Beğeniler 7 / 15
  • Ticaret 0, (%0)
yetkilibiri

Tarih aralığında bitiş verisine değer gelmemesi normal. Mantık şu; kullanıcı sadece başlangıç değeri girdi diyelim. O tarihten sonra mezun olanlar gelecek. Kullanıcı sadece bitiş değeri girdi diyelim. O bitiş tarihine kadar olan veriler listelenecek. Eğer hem başlangıç hem bitiş girer ise tarih aralığına göre bir sorgulama yapılacak.

İlgili alanlar DATETIME formatında.
 

 

www.instegral.com

compost0x compost0x Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 26.05.2018
  • Yaş/Cinsiyet 30 / E
  • Meslek Öğrenci
  • Konum Muğla
  • Ad Soyad A** Y**
  • Mesajlar 99
  • Beğeniler 23 / 19
  • Ticaret 2, (%50)
Dostum Anydesk ile bağlantı verebilirsen genel bir gözden geçirelim derim. Ofisteyim şuan öğle arası müsaitliğim var
 

 

wmaraci
wmaraci

compost0x compost0x Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 26.05.2018
  • Yaş/Cinsiyet 30 / E
  • Meslek Öğrenci
  • Konum Muğla
  • Ad Soyad A** Y**
  • Mesajlar 99
  • Beğeniler 23 / 19
  • Ticaret 2, (%50)
Diyelim $start_date ve $end_date parametrelerin var.

AND (AlumniAcademicInfo.grad_date >= '2017-12-12%' AND AlumniAcademicInfo.grad_date <= '%')

bu yazmış oldugun sorguda 2. tarihi vermezsen sana boş veri getireceketir. PHP de kodluyorsan şöyle bir fonksiyon ile çevirebiliriz.

1 Tane switch koyalım. Switch aktif olursa 2 tarih gelsin, aktif olmazzsa tek tarih seçilsin. Sorgunun arasınada if döngüsü koyalım switchten okutalım.

Veya daha kolay yol ile 2 tarih yan yana olsun. 2. date inputa bir value ver örneğin BOSTARIH. İf else döngüsü ile eğer date2 value = BOSTARIH gelirse $end_date bugünün tarihini alsın.
 

 

yetkilibiri yetkilibiri Yazılım Uzmanı Kullanıcı
  • Üyelik 28.05.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İstanbul Avrupa
  • Ad Soyad E** Y**
  • Mesajlar 107
  • Beğeniler 41 / 41
  • Ticaret 2, (%100)

murattkilinc adlı üyeden alıntı

yetkilibiri

Tarih aralığında bitiş verisine değer gelmemesi normal. Mantık şu; kullanıcı sadece başlangıç değeri girdi diyelim. O tarihten sonra mezun olanlar gelecek. Kullanıcı sadece bitiş değeri girdi diyelim. O bitiş tarihine kadar olan veriler listelenecek. Eğer hem başlangıç hem bitiş girer ise tarih aralığına göre bir sorgulama yapılacak.

İlgili alanlar DATETIME formatında.


Bu durumda sorgudan önce $end_date değişkenini kontrol edip boşsa şu anki tarih saati atamalısın. Boş olmamalı yani.
 

 

murattkilinc murattkilinc www.instegral.com Kullanıcı
  • Üyelik 06.04.2016
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İzmir
  • Ad Soyad M** K**
  • Mesajlar 119
  • Beğeniler 7 / 15
  • Ticaret 0, (%0)
yetkilibiri ve compost0x teşekkürler. Mantıken bugünün tarihini end_date kısmına çektiğimde sıkıntının çözülmesi gerekiyor. Veri tabanında denediğimde bir sıkıntı almıyorum çünkü.

$end_date = $_POST['end_date'];
if($end_date == ''){
$sql_end_date = mysqli_query($baglan,"SELECT CURDATE() as curdate");
$read_end_date = mysqli_fetch_array($sql_end_date);
$end_date = $read_end_date('curdate');
}


bu kod ile çektiğim end_date değişkenini sql sorgusunun içine koyuyorum. Ama maalesef olmuyor. Hiçbir sorgulama ekranı gelmiyor web sitesi içerisinde.

AND AlumniAcademicInfo.grad_date BETWEEN '$start_date' AND '$end_date'

ilgili kısım da bu şekilde.
 

 

www.instegral.com

compost0x compost0x Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 26.05.2018
  • Yaş/Cinsiyet 30 / E
  • Meslek Öğrenci
  • Konum Muğla
  • Ad Soyad A** Y**
  • Mesajlar 99
  • Beğeniler 23 / 19
  • Ticaret 2, (%50)
anydesk ile bir baglantı sağlayabilirsen bakalım
 

 

murattkilinc murattkilinc www.instegral.com Kullanıcı
  • Üyelik 06.04.2016
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım Uzmanı
  • Konum İzmir
  • Ad Soyad M** K**
  • Mesajlar 119
  • Beğeniler 7 / 15
  • Ticaret 0, (%0)
$end_date = $read_end_date('curdate');

bu kısımdaki parantezi köşeli parantez yapınca düzeldi şimdi teşekkürler
yetkilibiri

kişi bu mesajı beğendi.

www.instegral.com
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al