Php-Pdo İle Limit Ten Bağımsız Rowcount Alma
-
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" ));
coder2 tarafından 19/Haz/16 09:13 tarihinde düzenlenmiştir
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 -
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
-
Count ile kullanınca bu defa da verileri listelemez oldu ..
Çözüm için öneri bekleniyor..
-
SELECT COUNT(`id`), * FROM [tablo] ....
-
PcK0 bunu yazdı
SELECT COUNT(`id`), * FROM [tablo] ....
Hocam bu şekilde denedim ama olmadı
-
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 -
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
-
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 , $sonBu 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 -
Ç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.
-
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..