folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Php-Pdo İle Limit Ten Bağımsız Rowcount Alma



Php-Pdo İle Limit Ten Bağımsız Rowcount Alma

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    coder2
    coder2's avatar
    Kayıt Tarihi: 15/Mart/2007
    Erkek

    Merhaba arkadaşlar , alıştırma amaçlı olarak yazdığım sitede mesajları listelerken sayfalama yapmak için toplam kaç mesaj
    olduğunu sorgulamam gerekiyor ve her sayfada klasik olarak en fazla 10 kayıt göstermek istiyorum.


        $toplamkayitsayisi = $toplamkackayitvar->rowCount();
                $GelenMesajlar = $dbbaglanti->prepare("select * from $kategori where $gelenorgiden=:alankisi && $fieldadi=:durum ORDER BY id DESC LIMIT $ilk , $son");
                $GelenMesajlar->execute(array(
                    "alankisi" => $kadi,
                    "durum" => "1"
                ));



    Yukardaki şekilde kod ile limit belirtip istediğim 10 kaydı sıralatıyorum bunda sıkıntı yok fakat tek bir sorgu
    ile hem toplam mesaj sayısını hemde istediğim 10 kaydı almak istiyorum. Yukardaki sorgudan sonra
    GelenMesajlar->rowCount() yapınca doğal olarak sorgudan etkilenen kayıt sayısını
    veriyor yani 10 değerini döndürüyor fakat toplam da 15 kayıt var. Bunun için aşağıdaki gibi ayrı bir
    sorgulama yapıp ordan toplam kayıt sayısını alıp sonrada da tekrar sorgu oluşturup limit li halini
    almak ta biraz amelelik gibi duruyor..

     $toplamkackayitvar = $dbbaglanti->prepare("select * from $kategori where $gelenorgiden=:alankisi && $fieldadi=:durum ");
     $toplamkackayitvar->execute(array(
     "alankisi" => $kadi,
     "durum" => "1"
     ));
    
     $toplamkayitsayisi = $toplamkackayitvar->rowCount();
     $GelenMesajlar = $dbbaglanti->prepare("select * from $kategori where $gelenorgiden=:alankisi && $fieldadi=:durum ORDER BY id DESC LIMIT $ilk , $son");
     $GelenMesajlar->execute(array(
     "alankisi" => $kadi,
     "durum" => "1"
     ));




    Sonuçta dönen değerler array olduğu için sort-asort ile id ye göre büyükten küçüğe doğru sıralayayım
    vs diye denedim onu da beceremedim ki biraz karışık oluyor o işte.
    İstediğim şey sunucuyu en az şekilde yoracak bir kod yapısı ile hem toplam mesaj sayısını bulmak
    hemde limit belirtip istediğim aralıktaki mesajları ekrana basmak..

    Edit: Çok güzel bir editörümüz var
    coder2 tarafından 19/Haz/16 09:13 tarihinde düzenlenmiştir

    Önceleri Kızlar Utanınca Kızarırdı Şimdilerde Kızarınca Utanıyorlar..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    herlocksholmes
    herlocksholmes's avatar
    Kayıt Tarihi: 16/Şubat/2014
    Erkek

    emin değilim ama COUNT(id) as Toplam_Sonuc gibi denesen de buna baksan olur mu acaba?

    düzeltme: etkilemiyormuş yani olur hocam.

    kaynak: http://stackoverflow.com/questions/17020842/mysql-count-with-limit

     

     

    herlocksholmes tarafından 19/Haz/16 09:12 tarihinde düzenlenmiştir

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    coder2
    coder2's avatar
    Kayıt Tarihi: 15/Mart/2007
    Erkek

    Count ile kullanınca bu defa da verileri listelemez oldu ..  

    Çözüm için öneri bekleniyor..


    Önceleri Kızlar Utanınca Kızarırdı Şimdilerde Kızarınca Utanıyorlar..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    SELECT COUNT(`id`), * FROM [tablo] ....


    Sadece bi imza..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    coder2
    coder2's avatar
    Kayıt Tarihi: 15/Mart/2007
    Erkek
    PcK0 bunu yazdı

    SELECT COUNT(`id`), * FROM [tablo] ....

    Hocam bu şekilde denedim ama olmadı 


    Önceleri Kızlar Utanınca Kızarırdı Şimdilerde Kızarınca Utanıyorlar..
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nurulmac11
    nurulmac11's avatar
    Kayıt Tarihi: 04/Ağustos/2012
    Erkek
    select count(information_schema.columns) as count, kategori.* from senintablo 
    join information_schema.columns
    where information_schema.table_schema = 'db adi'and table_name = 'tablo_adin';

    count bilgisini gidip information_schema dan cekmeyi deneyebilirsin

    black implies white, self implies other, life implies death.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Austen
    Austen's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek

    Ekstra ufak bir sorgu yapmaktan zarar gelmez.

    Zaten rowcount dediğin gibi mevcut sorguyla alakalı sonuç döndürür. Tüm kayıtları istiyorsan illaki başka sorgu yapman lazım. Diğer türlü ekstra iş yapacaksın.

    En basit ve ilkel görünen fikir çoğunlukla en faydalı fikir oluyor. Devasa bir proje yapmıyorsan bunun yaratacağı saliselik gecikmenin hiçbir yere yükü olmaz.

    http://www.w3schools.com/SQL/sql_func_count.asp

     

    Austen tarafından 19/Haz/16 15:14 tarihinde düzenlenmiştir
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek

    Tek tablo sorgusu ile çözmek için, select sorgunda select'in hemen sonrasında SQL_CALC_FOUND_ROWS belirt. Gerisi bildiğin limit içeren sorgu. Yani şöyle :

    select SQL_CALC_FOUND_ROWS * from $kategori where $gelenorgiden=:alankisi && $fieldadi=:durum ORDER BY id DESC LIMIT $ilk , $son

    Bu sorgu çalıştıktan sonra Select Found_Rows(); sorgusu yukarıdaki sorgudan Limit olmadan dönecek satır sayısısını, tek bir satır tek bir sütunda verecek.

    MySQL'de bundan daha hafif bir yol yok.

    Ek: Bu fonksiyon oturum tanımlı olduğundan PDO'nun bir yan etkisi olur mu bilmiyorum, PDO ile denemedim.

    buzukatak tarafından 19/Haz/16 15:21 tarihinde düzenlenmiştir

    anlıyorum.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Çok büyük hata yapmışım. Bir an:

    COUNT(*) ID NAME
    276 10 Ahmet
    276 11 Ali
    276 12 Mehmet
    276 13 Hakan
    276 14 Kemal
    276 15 Ayşe

    Elde etmeyi planlamıştım. Unionsuz tek sorguda elde edilemez. Böylece sorgu sayısı azalacak derken sonuç büyümekte. Son dönem sürekli ORM kullanınca SQL'de zayıflama yaşamışım demekki.


    Sadece bi imza..
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    coder2
    coder2's avatar
    Kayıt Tarihi: 15/Mart/2007
    Erkek

    Tek sorguda 2 işlemide gerçekleştiremediğim için @Austen hocanın tavsiyesine uydum ve ilkelde görünse olduğu gibi bıraktım..


    Önceleri Kızlar Utanınca Kızarırdı Şimdilerde Kızarınca Utanıyorlar..
Toplam Hit: 856 Toplam Mesaj: 10
limit rowcount