MYSQL - 2 Tablo Birleştirme Ve Hariç Fonksiyonu
-
Merhaba;
Şimdi elimde iki tablo var tbl_ogrenci ve tbl_deney_grubu
tbl_deney_grubu tablosunda id ve ogrenci kolonları var ve burada deney grubuna katılan öğrencilerin id leri tutuluyor.
tbl_ogrenci de de öğrencilerin bilgileri. Bir sayfada deney grubuna girmeyen öğrencilerin listelemesini yapmam lazım
Öğrencilerin tamamını listelerken standart aşağıdaki sorguyu çalıştırıyorum.
$sorgu = "select * from tbl_ogrenci order by id desc";
Örneğin tbl_deney_grubu nda 1,2,3,4 nolu idler var. Ben tbl_ogrenci den bu 1,2,3,4 nolu idler hariç diğer öğrencileri getirmesi için aşağıdaki satırı yazdım. Ancak sorgu 4 kere dönüyor her öğrencinin adını 4 kere 1,2,3,4 id li öğrencilerin adını 3 kere yazıyor.$sorgu = "select * from tbl_ogrenci,tbl_deney_grubu WHERE tbl_deney_grubu.ogrenci != tbl_ogrenci.id";
Aynısını
$sorgu = "select * from tbl_ogrenci,tbl_deney_grubu WHERE tbl_deney_grubu.ogrenci <> tbl_ogrenci.id";
olarakta denedim.
Bu konuda bir fikri olan varsa çok sevinicem, kafayı yemek üzereyim. -
tam olarak soruyu anlayamadım olduğum ortmadan dolayı. ama gördüğüm kadarıyla eksik "join"
select * from tbl_ogrenci inner join tbl_deney_grubu on tbl_deney_grubu.ogrenci=tbl_ogrenci.id
bu şekilde bir dene. olmazsa sonuna aşağıdakini ekle
WHERE tbl_deney_grubu.ogrenci != tbl_ogrenci.id";
-
İlk verdiğin satır aşağıda yazdığımla aynı sonucu veriyor. Yani sadece deney grubunda olan öğrencileri listeliyor.
Benim istediğim deney grubunda olan öğrecilerin haricindekiler listelensin.
$sorgu = "select * from tbl_ogrenci,tbl_deney_grubu WHERE tbl_deney_grubu.ogrenci = tbl_ogrenci.id"; -
where i eklediğinde ne oluyor? yazdığın şarttaki gibi != şekilde ya da <>
-
where i eklediğimde hiç satır dönmüyor.
-
şuan aklıma bir şey gelmiyor hocam. uygun değilim pek yapabilmek için. eğer kimse yardım etmsezse yarın özel mesaj atarsan çözeriz
-
Eyvallah kardeşim. Bakalım bunu çözemez isem uyamamam bu gece :)
-
hocam sorunu tam anlayamamıs olabilirim.
Oracle icin söyle söyleyeyim, simdi DENEY ve OGRENCI adında 2 tablom var.
iki tablonun da kolonları ID ve AD olsun, ögrenci bilgisi dedigin kolonda ögrenci isimleri yazıyor diyelim.
ID 1'den itibaren isimler deniz, murat, ayse, fatma, elif, zülal, özgür, seda olsun.
simdi,
select * from OGRENCI
NATURAL JOIN DENEY
WHERE ID not in (1,2,3,4); //veya WHERE ID > 4;
dersek, bize ilk 4 ID dısındaki elif, zülal, özgür, seda sonuclarını döndürür OGRENCİ kolonundan, acaba senin istedigin sey tam olarak bu mu ?
ya da örnek olsun diye mi ilk 4 ID'yi sordun ?
-
Hocam arkadaş heralde örnek olsun diye 4 dedi,bunu tbl_ogrenci.id > tbl_deney.id şeklindede yaparız diye düşünüyorum ama ne kadar sağlıklı olur meçhul
-
öyle bile olmus olsa JOIN fonksiyonu kullanmadan olmaz o is.
kendimiz görseydik tabloları daha iyi olurdu.
-
inner joinsizde çalışıyor. sıkıntı yaratmıyo o ben hep öyle kullanıyorum.
Sorunu her ne kadar istediğim şekilde çözemesemde;
Deney grubuna alınan öğrencilerin insert edildiği bölüme aşağıdaki satırı,
$sorgu2 = “UPDATE `tbl_ogrenci` SET `durum` = ’2′ WHERE `id` = “.$_POST["kid"].” LIMIT 1 ;”;
Öğrenci listelemesinde de aşağıdaki satırı;
$sorgu = “select * from tbl_ogrenci where durum = 1 order by id desc”;
kullanarak çözdüm.
Ama ilk mesajda belirttiğim gibi olursa daha iyi olucak