wisex adlı üyeden alıntı: mesajı görüntüle
Merhabalar,

Elimde alttaki gibi bir sorgu var. kalansure.php diye bir sayfam var ve bu sayfada ORDER BY kalansüre şeklinde listeletmek istiyorum. DATEDIFF kullanıyorum ancak hata alıyorum. Yardımcı olabilir misiniz?

<?php
$sorgum = $baglanti->prepare("SELECT * FROM uyeler");
$sorgum->execute();
$sonucm = $sorgum->fetch();

$date1 = time();
$date2 = strtotime($sonucm["bitis"]);
$datediff = $date2 - $date1;
$wisemanx = round($datediff / (60 * 60 * 24));
$sorgu = $baglanti->prepare("SELECT * FROM uyeler order by '$wisemanx' desc");
$sorgu->execute();


?>
Merhaba,
Sorunuzda belirttiğiniz gibi DATEDIFF() fonksiyonu kullanarak kalan süreyi hesaplayabilirsiniz, ancak SQL sorgunuzda bir hata var. ORDER BY ifadesi içinde değişkeni yazmak yerine, değişkeni kullanarak bir değer döndürdükten sonra bunu ORDER BY ifadesinde kullanmanız gerekiyor. Ayrıca, desc kelimesini değişken olmadığı için tırnak içine almamanız gerekiyor.
Aşağıdaki kodu kullanarak doğru bir şekilde sorgu yapabilirsiniz:

$sorgum = $baglanti->prepare("SELECT * FROM uyeler");
$sorgum->execute();
$sonucm = $sorgum->fetch();
 
$date1 = time();
$date2 = strtotime($sonucm["bitis"]);
$datediff = $date2 - $date1;
$wisemanx = round($datediff / (60 * 60 * 24));
$sorgu = $baglanti->prepare("SELECT *, DATEDIFF(bitis, NOW()) AS kalan_sure FROM uyeler ORDER BY kalan_sure DESC");
$sorgu->execute();
Yukarıdaki kodda, DATEDIFF(bitis, NOW()) fonksiyonu kullanarak kalan süreyi hesaplıyoruz ve bunu kalan_sure adlı bir sütuna kaydediyoruz. Daha sonra ORDER BY ifadesinde bu sütunu kullanarak sıralama yapıyoruz.
Umuyorum yardımcı olabilmişimdir.