• 10-02-2017, 20:18:01
    #1
    Veritabanı sorgusu:

    select * from konular;

    Php kodu

    <?php
    foreach ($akis as $value) {
    			if($value['konu_saat'] < date('H:i') and $value['konu_tarih'] == date('Y-m-d');) { ?>
    				<li>
    					<span><?=$value['konu_saat']?></span>
    					<strong><?=stripslashes($value['konu_adi'])?></strong>
    					<strong><?=stripslashes($value['konu_tarih'])?></strong>
    				</li>
    <?php } } ?>
    Diyelim ki saat 13:00, yukarıdaki sorgu sayesinde 00:00 - 13:00 arasındaki konular sıralanıyor. Benim almak istediğim sonuç ise bu sıralanan konuların arasındaki son çıktı. yani 12:55 te eklenen gözüksün sadece. Bunu nasıl yapabilirim?
  • 10-02-2017, 20:26:45
    #2
    bknz :Order By
  • 10-02-2017, 20:32:25
    #3
    Son eklenene göre kayıtları listelemek için;
    SELECT * FROM konular ORDER BY id DESC;
    Sadece son kaydı almak için;
    SELECT * FROM konular ORDER BY id DESC LIMIT 1;
  • 10-02-2017, 20:46:59
    #4
    phpkoder adlı üyeden alıntı: mesajı görüntüle
    bknz :Order By
    Daryl_Dixon adlı üyeden alıntı: mesajı görüntüle
    Son eklenene göre kayıtları listelemek için;
    SELECT * FROM konular ORDER BY id DESC;
    Sadece son kaydı almak için;
    SELECT * FROM konular ORDER BY id DESC LIMIT 1;
    Sanırım tam incelemediniz, koşulun içindeki son elemanı istiyorum.
  • 10-02-2017, 23:45:32
    #5
    <?php
    $ci = array();
    foreach ($akis as $value) {
        if($value['konu_saat'] < date('H:i') and $value['konu_tarih'] == date('Y-m-d')) { 
            $ci[] = $value;
            ?>
        <?php } } ?>
    <?php
    $son = end($ci);
    ?>
    <li>
        <span><?=$son['konu_saat']?></span>
        <strong><?=stripslashes($son['konu_adi'])?></strong>
        <strong><?=stripslashes($son['konu_tarih'])?></strong>
    </li>
    Burada süreyi geçenler bir diziye aktarılıyor. end fonksiyonuylada sonuncusunu alıyoruz.
  • 11-02-2017, 11:08:18
    #6
    grafikcoder adlı üyeden alıntı: mesajı görüntüle
    <?php
    $ci = array();
    foreach ($akis as $value) {
        if($value['konu_saat'] < date('H:i') and $value['konu_tarih'] == date('Y-m-d')) { 
            $ci[] = $value;
            ?>
        <?php } } ?>
    <?php
    $son = end($ci);
    ?>
    <li>
        <span><?=$son['konu_saat']?></span>
        <strong><?=stripslashes($son['konu_adi'])?></strong>
        <strong><?=stripslashes($son['konu_tarih'])?></strong>
    </li>
    Burada süreyi geçenler bir diziye aktarılıyor. end fonksiyonuylada sonuncusunu alıyoruz.
    Aynen bunu istiyordum eyvallah hocam. Diziye aktarma işlemini yani $ci[] = $value; bunu bilmiyordum. Öğreniyoruz geliştiriyoruz kendimizi.
  • 11-02-2017, 11:54:14
    #7
    Sorunu çözmüşsünüz ancak, tüm verileri alıp döngüyle tekrar diziye atıp kullanmak yerine, saat ve tarih şartlarını sql cümleciğinize ekleyerek tek seferde son kayıtı alabilirsiniz, zannımca daha performaslı olur.
  • 11-02-2017, 12:32:17
    #8
    sehzadem adlı üyeden alıntı: mesajı görüntüle
    Sorunu çözmüşsünüz ancak, tüm verileri alıp döngüyle tekrar diziye atıp kullanmak yerine, saat ve tarih şartlarını sql cümleciğinize ekleyerek tek seferde son kayıtı alabilirsiniz, zannımca daha performaslı olur.
    Aslında onu yapmıştım, php tarafından da yapmak istedim.

    select * from konular where konu_tarih=CURDATE() and konu_saat<CURTIME() order by konu_saat desc limit 1;

    Performanslarını karşılaştırmaya bile gerek yok SQL olan daha hızlı çıkacaktır. Teşekkür ederim ilgin için.