Veritabanından veri çekmek ve formatlı biçimde yazdırmak

Merhaba,

İlk eğitsel yazıma gelen “istek parça” üzerine kolay birşeyle başlıyorum. Bu eğitselde veritabanımızdan veri çekeceğiz ve bunu değişik şekillerde yazdıracağız.

Öncelikle basit bir SQL sorgusuna ve içerdiği değerlere bakış yapalım.

İşlev olarak yukarıdaki SQL sorgusu “tablo_adi” isimli tablodaki “sutun1” isimli sütunun değeri “kosul1″‘e eşit olan tüm kayıtların “deger” sütunlarını çeker. Öyleyse sorgumuzda,
“deger” verilerini elde etmek istediğimiz sütunun adıdır. Not: Birden fazla sütunun verilerini çekmek isterseniz virgülle ayırmak koşulu ile hepsini yazabiliriz. Eğer istisnasız tüm sütunları çekmek istersek “*” kullanıyoruz.
“tablo_adi”  üzerinde sorgu yapmak istediğimiz tabloyu belirtir.
“sutun1” sorgumuzda koşulları sağlaması için içeriğine bakacağımız sütunun adını, “kosul1” de “sutun1” sütunu sorgularken kullanacağımız değeri temsil ediyor.

SQL’de koşulları sorgularken kullanabileceğiniz operatörler aşağıdaki gibidir. Ancak bu yazımda hepsine değinmeyeceğim. Dilerseniz w3schools gibi bir kaynaktan araştırabilir ya da ayrıntılı açıklama için yorum bırakabilirsiniz.

Operatör Anlamı
= Eşittir
<> Farklıdır
> Büyüktür
< Küçüktür
>= Büyük ya da eşittir
<= Küçük ya da eşittir
BETWEEN Belirtilen aralığın içinde
LIKE Belirtilen koşula göre benzerlik
IN Belirtilen değerlerden birine eşitse

Basit SQL sorguları ile ilgili birşeyler öğrendik. Şu anki aşamada bunların çoğuna ihtiyacımız olmayacak. Veritabanımızda bu örnekte kullanmak üzere bir tablo oluşturdum ve adını “ornek1” koydum. İçine denemek için bazı veriler girdim ve son hali aşağıdaki resim gibi oldu.

Çalışmamızda kullandığımız ornek1 tablosu

Çalışmamızda kullandığımız ornek1 tablosu

Bu tabloda kullandığımız “ID” sütunu verilerin veritabanındaki kayıt numarasını tutuyor. “kat_ID” sütunu ise eğer veri bir başka verinin altında yer alıyorsa, o verinin “ID”sini alıyor. Başka hiçbir verinin altında yer almayan verilerde ise “kat_ID” sütunu NULL yani boş değer alıyor. “isim” sütunumuzda ise verimize ait “isim” değeri yer alıyor. Sorgularımıza “ID” ve “kat_ID” değerlerini yazdırmayacağımızdan sadece “isim” sütununu çekmekle yetineceğiz ancak pekiştirmek isterseniz:

Buradan itibaren yavaş yavaş PHP ile karıştırmaya başlıyoruz işleri.

Bu eğitselin PHP bölümünde kullanacağımız başlıca komutlar şöyle;

mysql_query komutu tırnak içinde yazılmış olan SQL sorgusunu ya da parantez içinde bir değişken ile verilmiş olan SQL sorgusunu MySQL sunucumuzda işletir ve sonuçları bir resultset içerisinde (yukarıda $sorgu_resultset değişkeninde) bize döndürür

mysql_fetch_assoc daha önce çalıştırılmış olan sorgunun sonuçlarını tablodaki sütun isimleri ile ilişkilendirilmiş biçimde bir dizi değişkene aktarır.

“mysql_fetch_assoc”‘dan farklı olarak “mysql_fetch_array” daha önce çalıştırılmış olan sorgunun sonuçlarını tablodaki sütun isimleri ile ilişkilendirmeden bir dizi değişkene aktarır.

mysql_num_rows daha önce çalıştırılmış olan sorgunun resultset’inde kaç adet veri ile geri döndüğünü verir.

“while” döngüsü koşul sağlandığı sürece arasındaki kodları işletir.

 

Yukarıdaki ornek1 tablomuz üzerinde çalıştığımızı ve veritabanına bağlandığımızı varsayarak örnekler yapalım.

Ekran çıktımız şöyle olacak:
Chrome

Öyleyse şimdi ana kategorideki, yani kat_ID değeri boş olan tüm verileri yazdıralım.

Yukarıda tüm kategorileri yazdırdık. Bu sefer de iki kademeli yapımız olduğunu göz önünde bulundurarak tüm verileri çekerek kategori yapısıyla beraber yazdıralım.

 

Herşey tamam, şimdi son örnek olarak gelen sonuçları iki sütun halinde yazdıralım. Bunun için yukarıdakinden çok farklı birşey yapmıyoruz. Mantık olarak sadece bir tablo yaratacağız ve gerekli yerde tablonun bir sütununu kapatık diğerini açmasını isteyeceğiz.

 

 

Böylece ilk eğitselimi tamamlamış oldum. Kodları bolca açıkladığım için herhangi bir demo çalışması hazırlamaya gerek görmedim.

Eğer denediğinizde çalışmazsa yorum olarak yazın, kontrol edeyim. Umarım birilerine faydalı olur.

Bu yazı bugün 0 kere olmak üzere toplam 8,787 kere okundu.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  1. Pingback: Gelecek Yazılar Hakkında | mustafabugra.com

  2. Merhaba arkadaşlar, phpde bir resim galerisi oluşturdum, veri tabanında ise iki tablo var birinci tablo resim galeri, ikicisi ise resim kategori diye. benim sorum şu, öncelikle iki kategori oluşturdum, bu iki kategorilere iki farklı resim yükledim, anasayfada son yüklenen resimlerin gösterilmesini isityorum gösteriyor, lakin kategori adını dedil kategori numarasını gösteriyor bende eşitse değerini kullandım kod aynen şu: ?php if($row_resimler[‘res_kat’]==$row_kategori[‘kat_id’]) echo $row_kategori[‘kat_adi’] kategorinin adını gösteriyor lakin sadece ilk kategori adını gösteriyor diğerlerini boş bırakıyor. gözükmeyen diğer kategori adlarını nasıl göstere bilirim. yardımlarınız için şimdiden tşk ederim

    • Merhaba,
      Şu an kopyaladığınız kodda herhangi bir döngü görünmüyor ancak muhtemel sorun döngülerinizde. Her resim ekrana yazdırılırken kategori sorgusunun sonuçlarını tekrar döngüden geçirerek eşitlik durumunda kategori adını yazdırırsanız sorun çözülecektir. Diğer yollar olarak resimleri yazdırdığınız döngünün içerisinde her seferinde kategori_id’yi sorgulatabilirsiniz. Bu daha çok sorgu ve çok resim olması durumunda işlem yükü demektir. Son çözüm iste kategori adını çektiğiniz resultset’i (sonuçlarınızı) kategori_id’si index olacak şekilde bir döngüye aktarmanız. Bu durumda istediğiniz şekilde $kat_array[$row_resimler[‘res_kat’]] size doğrudan kategori adını verecektir.

  3. Merhaba,
    TABLOLARIM
    Uyeler (kulladi, kullsif, mail)
    Yorumlar (yorum, mail)

    Yorumlardaki mail ile uyeler tablosuna gidip yorumun sahibinin adını yorumun yanında yazdırmak istiyorum. 2 kullanıcı ileörnek yaptım ancak iki yorumda da tek kullanıcının ismini yazıyor.

    Kodum şu şekilde:
    $sorgu = mysql_query(“SELECT uyeler.kulladi FROM uyeler INNER JOIN yorumlar ON yorumlar.mail = uyeler.mail”);
    $sonuc = mysql_fetch_array($sorgu);
    echo “$sonuc[kulladi]”;

    • Merhaba,
      Join kullanmadım ancak şu şekilde deneyebilirsin.
      select yorumlar.*, uyeler.kulladi from yorumlar, uyeler where yorumlar.mail=uyeler.mail

      Kullanırken de normal şekilde kullanabilirsin.

    • Merhabalar,
      Aynı soyada sahip birinden yorum gelince başta şaşırdım :) Öneriniz için teşekkürler. Framework’lere geçiş yapmak istiyorum ama bir türlü zaman ayıramadım. Sizin sitenize de gözatma fırsatım oldu. Faydalanacağım kesin gibi duruyor.