Php-Mysql veritabanı listeleme işlemleri
21452 6

Sql "SELECT" Deyimi

Bu deyim sorgularımızda en çok kullandığımız deyimdir. Kelimenin anlamından yola çıkarak, bir seçim işlemi yapmak için kullanılır. Veritabanına kaydettiğimiz verileri bir şarta bağlı olarak çekmek isteğimiz durumlarda kullanırız veya şartsız tüm verileri çekeriz. Öncelikle "SELECT" ifadesinin kullanımına bir bakalım.

Select ifadesinin yazım biçimi;

SELECT alan_adlari FROM tablo_adi
WHERE secim_kriteri
ORDER BY siralanacak_alan [ASC/DESC]
LIMIT nereden,kac_tane

SELECT ifadesinin en yalın halini yazmaya çalıştım. Kafa karıştırmayacak kadar. Bu ifadeye eklenebilecek daha çok şey var ama gözünüzü korkutmayalım. Temelde bu yazımla bile bir çok işi halledebilirsiniz. Bu yazımı açıklamaya çalışacağımıza örnekler ile anlatmaya çalışalım. 

Örnek bir tablo oluşturalım ve adı "ogrenciler" olsun.

id ad_soyad okul_no yas cinsiyet
1 Zeynep Çimen 125 15 Bayan
2 Emrah Yalaz 127 16 Erkek
3 Ahmet Topuz 128 15 Erkek
4 Elif Duman 130 16 Bayan
5 Hasan Durmaz 132 17 Erkek

Bu tabloyu referans alarak birkaç sorgu oluşturalım. 

SELECT ad_soyad,cinsiyet FROM ogrenciler

Örnekte 2 alan seçildi ve hiçbir şart koşulmadı yani tüm kayıtlar listelenir.

ad_soyad cinsiyet
Zeynep Çimen Bayan
Emrah Yalaz Erkek
Ahmet Topuz Erkek
Elif Duman Bayan
Hasan Durmaz Erkek
SELECT * from ogrenciler
WHERE cinsiyet='Bayan'

" * " kullanarak tüm alanların seçileceğini söyledik. WHERE ifadesi ile cinsiyeti "Bayan" olan öğrencilerin seçileceğini söyledik. Bu sorgudan 2 sonuç çıkar.

id ad_soyad okul_no yas cinsiyet
1 Zeynep Çimen 125 15 Bayan
4 Elif Duman 130 16 Bayan

WHERE ifadesinin kullanımına başka bir örnek;

SELECT id,ad_soyad FROM ogrenciler
WHERE cinsiyet='Erkek' && yas>'15'

Örnekte birden fazla şart sunmuş olduk. Araya konulan "&&" işaretleri "ve" anlamına gelir. Bunun yerine istenirse "and" kullanılabilir. Sorguda cinsiyeti erkek olan ve yaşı 15'ten büyük olan öğrenciler seçilmektedir. Makalede listeleme işlemi anlatıldığı için daha fazla ayrıntıya girmeyelim. Ayrıntılı bilgi için bu makaleye bakabilirsiniz. Yukarıdaki sorgunun sonucu;

id ad_soyad
2 Emrah Yalaz
5 Hasan Durmaz

Aynı sorguyu "ORDER BY" kullanarak sıralama yapmanız mümkün, az önceki sorguya küçük bir ekleme yaparak sonucun id bilgisine göre azalan olmasını sağlayalım. Yukarıya bakarsanız şu an artan bir sıralamaya sahip.

SELECT id,ad_soyad FROM ogrenciler
WHERE cinsiyet='Erkek' && yas>'15'
ORDER BY id DESC

Busorguda kullanılan "DESC" ifadesi sorgunun id bilgisine göre azalan olacağını söyler. Bunun yerine "ASC" yazılır ise artan bir sıralama elde edilir. Sorgunun sonucu;

id ad_soyad
5 Hasan Durmaz
2 Emrah Yalaz

Kısaca LIMIT ifadesinden de bahsedecek olursak çıkan sonuçları sınırlandırmak için kullanılır diyebiliriz. Yani sorgunuzun sonucunda 50 kayıt dönüyor fakat size 5 kayıt lazım, bunu LIMIT ile yapabilirsiniz. Yine az önceki sorguda 2 sonuç çıkıyor ben 1 kayıt istiyorsam şöyle yapmalıyım.

SELECT id,ad_soyad FROM ogrenciler
WHERE cinsiyet='Erkek' && yas>'15'
ORDER BY id DESC
LIMIT 1
id ad_soyad
5 Hasan Durmaz

Veya belli bir kayıttan itibaren istendiği kadar kayıt seçilebilir. Yani az önce tek bir değer belirttiğim için çıkan ilk sonucu verdi. Şöyle dersek;

SELECT id,ad_soyad FROM ogrenciler
WHERE cinsiyet='Erkek' && yas>'15'
ORDER BY id DESC
LIMIT 1,1
id ad_soyad
2 Emrah Yalaz

Sıralamanın 0'dan başladığını unutmadan, 1. kayıttan başla 1 kayıt getir şeklinde açıklayabiliriz. Bu durumda çıkan sonuç içerisindeki 2. kayıt seçilmiş olur.

Kısaca select ifadesini anlatmaya çalıştık. Şimdi bu seçim işlemini php ile birleştirelim. Önceki derslerimizde sorgularımızı mysql_query() ile mysql'e gönderdiğimizi söylemiştik. Yine öncelikle sorgumuzu oluşturup çalıştırıyoruz. Daha sonra çıkan sonuçları bir döngü ve bir fonksiyon yardımı ile tablo içerisine yerleştirip listeliyoruz.

Önceki dersteki örneğimize "listele.php" dosyasını ekleyip bu kodları da içine yapıştırabilirsiniz.

<?php

$sorgu=mysql_query("select * from deneme");
echo "<table>";

echo '<tr><td>Ad</td><td>Soyad</td><td>E-Posta</td></tr>';

while($kayit=mysql_fetch_array($sorgu)){
    echo '<tr>';
    echo '<td>'.$kayit["ad"].'</td>';
    echo '<td>'.$kayit["soyad"].'</td>';
    echo '<td>'.$kayit["e_posta"].'</td>';
    echo '</tr>';
}

echo '</table>';

?>

While döngüsü parantezleri içerisine yazılan mysql_fetch_array() fonksiyonu, verilen sorgudaki kayıtları bir bir çeker ve döngünün her turunda sıradaki kaydı işler. Sorgudan çıkan kayıtlar bittiğinde sonuç üretilemeyeceğinden döngü sonlanır. Zaten baktığınızda döngü dışında tablo başlatılıyor ve bitiriliyor. Araya da döngüden gelen satırlar ekleniyor ve listeleme işlemi bu kadar. mysql_fetch_array() fonksiyonuna benzer başka fonksiyonlar da mevcut. Örneğin mysql_fetch_assoc(), mysql_fetch_object() ... gibi. Bu fonksiyonların farklarını bu makalede bulabilirsiniz.

Yorumlar
mte 4 yıl önce dedi ki;
hocam ben yeni bir site kurdum ama karekter hatası meydana geliyor neyse bunları replace metoduyla yaptım ama yinede bir harfim ? işareti olarak yazılıyor ğ harfini hallettmim bu sefer ı harfi ? oluyor yardımıcı olursnız çok makbule gçersiniz saygılar! Cevapla
admin 4 yıl önce cevap verdi;
Benim karşılaştığım 4 adet karakter problemi var. 1- Veritabanı karakter setinin ve tabloların karakter setlerinin ayarlanması gerekir. 2- Html belgenin en üstünde "charset" kısmından ayarlaman lazım. 3- Üzerinde çalıştığın belgenin karakter setini ayarlaman lazım.(Eğer notepad++ ile çalışıyorsan yukarıda kodlama menüsü var!) 4- Bunlar da olmadı ise bağlantı kodlarını yazdığın yerde karakter setini ayarlamak için sorgu oluşturmalısın. (Bunu da veritabanı bağlantı işlemlerinde anlattım.)
mte 4 yıl önce dedi ki;
hocam mysql sorununu tüm sütünların carekter setlerini değiştirerek buldum ama bir sorunm daha meydana çıktı bu sefer html karekterleri bozuk çıkyor internette bir sürü kod ekledim ama nafile ya veritabanı verileri bozuluyor yada html hocam hiç çaresi yokmu bu arda mysql de utf-8 kullanıyorum aşağıdaki gibi yapsam html verileri bozuluyor böylde yapsam Cevapla
can 3 yıl önce dedi ki;
hocam bu listeleme sayfasının üstüne bir arama kutusu koysaydık ordaki aramaya göre alttaki tablo şekillenseydi bukodlara ne eklemek gerekirdi acaba Cevapla
admin 3 yıl önce cevap verdi;
1
Sayfanın üst kısmında $_POST yöntemi ile arama değerinin gelip gelmediği kontrol edilir ve sorgu ona göre şekillendirilir, yani ad'a göre arama yapılacaksa; if($_POST){ $ad=$_POST["ad"]; $sorgu=mysql_query("SELECT * FROM deneme WHERE ad='$ad'"); }else{ $sorgu=mysql_query("SELECT * FROM deneme"); }
can 3 yıl önce dedi ki;
hocam bunun bir örnegini yapmanız mümkünmü acaba Cevapla
^
X