MySQL Select

SELECT ifadesi veritabanından bilgileri seçer ve kullanıma hazır hale getirir.

Veritabanı Tablosundan Veri Seçmek.

SELECT ifadesi veritabanından bilgileri seçer.

Syntax

SELECT sutun_adi(s) FROM tablo_adi 

PHP ile sorguyu çalıştırmamız için mysql_query() fonksiyonunu çalıştırmamız gerekir.MySQL bağlantısına sorgu ve istek gönderilir.

Örnek Örneğimizde “Arkadas” tablosundaki tüm verileri seçer.(NOT: * sembolü tablodaki tüm verileri işaret eder.)


< ?php

$con = mysql_connect("localhost","serpito","abc123");

if (!$con){

die('Bağlanamadı: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Arkadas");

while($row = mysql_fetch_array($result)){

echo $row&#91;adi&#93; . " " . $row&#91;'soyadi'&#93;;echo "<br />";

}

mysql_close($con);

?>

Örneğimizde sorgudan sonra ele alınan veriler $result değişkeni tarafındn tutulur. mysql_fetch_array() fonksiyonu ile kayıtları $result değişkenine dizi halinde verir. mysql_fetch_array() her sorgusunda birer satır okuyarak değişkene gönderir.Böylece while döngüsü sona erdiğinde tablodaki tüm verilerde yayınlanır.Kodun çıktısı aşağıdaki gibi olur:

Atilla Atasoy
İzzet Norton


Sonucu HTML tablosunda Göstermek

Yukarıdaki sonuçları aynı şekilde kullanarak bir HTML tablosunda kullanalım:


< ?php

$con = mysql_connect("localhost","serpito","abc123");

if (!$con){

die('Bağlanamadı: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Arkadas");

echo "<strong><table border='1'>< tr><th>Adı</th><th>Soyadı</th>";

while($row = mysql_fetch_array($result)){

echo "<tr>";

echo "<td>" . $row[‘adi'] . "</td>";

echo "<td>" . $row[‘soyadi'] . "</td>";

echo "</tr>";

}

echo "</table>";

mysql_close($con);

?>

Örneğimizin çıktısı şöyledir:

Adı Soyadı
İzzet Norton
Atilla Akoğlu

12 thoughts on “MySQL Select

  • select ile aldığımız bir kaydın içinde diğer bir tabloda bulunan başka bir maddenin id’si bulunsun. sadece bir sorguyla, hem bu veriyi hem de bu veri içinde geçen id’yi alıp diğer bir tablodaki id’ye sahip olan veriyi çekmemiz mümkün mü?

    misal;
    isciler adında bir tablom var. her işçinin bağlı olduğu bir üst müdürün id’sini de burada tutuyorum ama bu müdürlerin adlari mudurler tablosunda.

    select * from isciler where ad=’ahmet’
    diyerek ahmet adlı işçileri aldım. fakat bunların bağlı oldukları müdürlerin de isimleri hemen yanında gelsin istiyorum. bunu yapmak için özel olarak veritabanının yapısını değiştirmem ve primary key-bağlı key şeklinde bağlama yapmam şart mı? şart değilse bunu nasıl yaparım, kısaca bunu da bir yerlerde açıklarsan sevinirim. 🙂

  • Tabi ki Yasin

    bahsettiğin olay MySQL-Join ile mümkün. Yine de burda açıklamaya çalışayım.

    Select* from Isciler LEFT JOIN Mudurler ON Isciler.mudurId = Mudurler.ID where Isciler.ad='ahmet'
    Burda Ahmet isimli işçinin ve bağlı olduğu müdürün bilgileri tamamen tek satırda gelir.
    Tek satırda bunu yapmak pek akıllıca olmasa gerek , onun için SELECT * yerine , işine yarayacak olan değişkenleri alırsan iyi olur,
    misal;

    Select Isciler.ad, Isciler.soyad, Mudurler.ad, Mudurler.soyad From Isciler Left Join Mudurler ON Isciler.mudurId = Mudurler.ID where Isciler.ad='ahmet'

  • Evet, bunu düşündüm, ama tam uygulamasını yapamamıştım. Teşekkürler. Bir de şöyle bir durum var;

    Random bir işçi alacağım, aynı satırda yani tel sql sorgusunda bu işçinin müdürünü de görebilir miyim?

    select ad from isciler order by rand limit 1

    Peki aynı anda burdan rastgele gelecek olan işçinin müdürünü de diğer tablodan alma imkanım var mı?

  • Random işçiyi nasıl alıyorsun tam anlamadım.

    Veritabanından mı random çekiyorsun işçiyi, yoksa kodların ile random id alıp, id’e göre mi MySQL’e sorgu gönderiyorsun?

  • mysql’deki order by rand ile işte. Yani burda asıl mesele mysql ile alakalıydı. php ile ben bunu tabii ki çekeceğim ama önceden hemen derli toplu olarak mysql’den alsam ve tekrar tekrar veri tabanıyla uğraşmasam diye düşündüm. Daha gerçekçi bir örnek vereyim o zaman;

    Sitede rastgele bir kayıt göstereceğim. Fakat bu kaydın bağlı olduğu bir başka kayıt var. İlk tablo bir nevi “karşılaştırma” tablosu. İçinde iki veri var, bunları random olarak mysql’den alacağım ve sayfaya göstereceğim. Aynı zamanda bu iki verinin ayrıntılarını içeren bir başka tablo var. Ondan da sadece bu verilerle alakalı bilgileri çekmem gerekiyor. Bunu iki posta olarak şu an zaten yapıyorum. Önce random veriyi çekiyorum, ardından da bu verilerin detayını diğer tablodan getiriyorum. Ama belki hız açısından yararlı olabilir diyerek şöyle bir şey soruyorum. Mysql, ilk tablodan veriyi random olarak aldığı anda, aynı zamanda bu içindeki verilerin detaylarını da bana tek sorguda getirebilir mi?

    İşte işçi örneğindeki gibi, işçiyi çekerken aynı anda o işçinin müdürünün id’sini alıp müdürler tablosundan o müdürün detaylarını getirmek gibi mesela.

    Anlaşılması zor gibi duruyorsa, çok da mühim değil. Yazarak anlatmak zor 🙂

  • şuan compile edemiyorum fakat kısayoldan bir sql yazayım hemen, en azından fikir verir:


    SELECT *
    FROM Isciler, Mudurler
    WHERE Isciler.mudurId = Mudurler.id
    ORDER BY rand( )
    LIMIT 0 , 1

    ayrıca order by rand() konusu kıllandırdı beni . GB, TB büyüklüğünde veritabanıyla uğraşmıyorsan , kulak asmaya gerek yok aslında. neyse , kod işini görür umarım.

    5 dk arayla güncelleme: localde derledim , bu şekilde yapı kurarsan işini görür sanırım, kolay gelsin

  • selam,sizin verdiğiniz örneğe benzer bi’kod üzerinde çalışıyorum fakat,while döngüsü çalışmıyor,yani veritabanında var olan,veriyi göstermiyor. while döngüsü içine hazdığım herhangi bir komutu da işlemiyor.Herhangi bir php kod hatası da yok,veritabanındaki tabloyuda seçiyor ama bi’türlü veriyi listelemiyor,aceba bunun sebebi ne olabilir?

  • döngünün içine girmiyordur o zaman şenol , kodun o kısmını bi yazarmısın,
    sanıyorum fetch olayında problem vardır.

  • kodlarım aşağıda:

    <?php

    $vt_sec=mysql_select_db($koyad,$veritabani);
    if (!$vt_sec) echo “veri tabani secilemedi “;else echo “veritabani secildi “;
    $sec=mysql_query(“SELECT * FROM yazilar”);
    while ($tut = mysql_fetch_array($sec))
    {
    echo $tut[baslik].””.$tut[yazi].””.$tut[yazan].””.$tut[tarih];
    }
    ?>

  • <?php
    $con = mysql_connect(“localhost”,”veritabani”,”sifre”);
    if (!$con)
    {
    die(‘Could not connect: ‘ . mysql_error());
    }
    $kod = rand(10000, 1000000);
    $gead=$_POST[‘gead’];
    $gesoyad=$_POST[‘gesoyad’];
    $dutarih=$_POST[‘dutarih’];
    $damatad=$_POST[‘damatad’];
    $damatsoy=$_POST[‘damatsoy’];

    if (mysql_error())
    {
    echo (“Hata olustu! Hata:”);
    echo mysql_error();
    exit();
    }

    mysql_select_db(“veritabani”, $con);
    $liste=mysql_query(“select * from davet where gead=’$gead’, gesoyad=’$gesoyad’, dutarih ‘$dutarih’, damatad ‘$damatad’, damatsoy=’$damatsoy'”);
    $email_kontrol2 = $liste;
    if($email_kontrol2 > 0)

    echo “Hata: Böyle bir kayıt var. Lütfen bilgileri kontrol ediniz”;
    else{

    $sql=”INSERT INTO davet (kod, gead, gesoyad, dutarih, damatad, damatsoy) VALUES (‘$kod’,’$gead’,’$gesoyad’,’$dutarih’,’$damatad’,’$damatsoy’)”;

    if (!mysql_query($sql,$con))
    {
    die(‘Error: ‘ . mysql_error());
    }
    echo “Kayit Tamalandi!”;

    $mail = $_POST[mail];
    $icerik = “içerik mesajı”.” “.”$kod”;
    $mesaj = “mesaj.”;

    mail(“$mail”,”$mesaj”,”$icerik”);
    mail (“asd@asd.com”,”$mesaj”,”$icerik”);
    }
    mysql_close($con)

    ?>

    şimdi elimde yukarıdaki kodlar var burda yapmak istediğim form aracılığı ile gelen verilerin önce veri tabanında olup olmadığını kontrol etmek varsa hata mesajı vermesini yoksa verileri kaydetmesini sağlamak ama sanırım kontrolü yapmıyor yada kontrolü yapsa da aynı girdileri tekrar kaydediyor nerde yanlış yaptığım konusunda yardımcı olabilecek arkadaşlara -olamayacaklara da tabi- şimdiden teşekkürler

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir