• 22-10-2010, 04:46:10
    #1
    Üyeliği durduruldu
    Daha açıklayıcı bir başlık düşündüm fakat aklıma gelmedi.

    Basit bir mesaj kutusu yapmaya çalışıyorum. Mesajlar tablosundan mesajları listeliyorum. Fakat mesajlar tablosunda gönderen ve alan kişilerin üye tablosundaki id numaraları var.

    şu şekilde mesajları listeliyorum;
    function gelenler(){
    	$ben = $_SESSION['id'];
    	$ilevye = mysql_query("SELECT * FROM `mesajlar` WHERE alan='$ben'");
    	while( $yea = mysql_fetch_assoc($ilevye) ){
    		$gonderenid = $yea['gonderen'];
    		$yeaid = $yea['id'];
    		$yeakonu = $yea['konu'];
    		$yeatarih = $yea['tarih'];
    	echo "<li><a href=gelenler?mesajid=$yeaid>$name : $yeakonu <font style=float:right;>$yeatarih</font></a></li>";
    	}
    
    }

    İçine bir döngü daha sokarak aldığım $gonderenid verisini uye tablosunda seçip, üyenin ismini almak istiyorum. Bunu da şu şekilde denedim, fakat çalışmadı. mysql_error() da boş dönüyor. error log da boş...

    function gelenler(){
    	$ben = $_SESSION['id'];
    	$ilevye = mysql_query("SELECT * FROM `mesajlar` WHERE alan='$ben'");
    	while( $yea = mysql_fetch_assoc($ilevye) ){
    		$gonderenid = $yea['gonderen'];
    			$kimlanbu = mysql_query("SELECT isim FROM `uye` WHERE id='$gonderenid' ")
    			while($naber = mysql_fetch_assoc($kimlanbu)){
    			$name = $naber['isim'];
    			}
    		$yeaid = $yea['id'];
    		$yeakonu = $yea['konu'];
    		$yeatarih = $yea['tarih'];
    	echo "<li><a href=gelenler?mesajid=$yeaid>$name : $yeakonu <font style=float:right;>$yeatarih</font></a></li>";
    	}
    
    }
    Yardımlarınızı bekliyorum
  • 22-10-2010, 13:15:51
    #2
    Üyeliği durduruldu
    10 kişi okumuş. 2. El forumları gibi "Up Up Up Up!" mı yapalım yani
  • 22-10-2010, 13:22:53
    #3
    Üyeliği durduruldu
    mysql ile halledilebilir

    SELECT mesajlar.*,kullanicilar.kullanici_adi FROM mesajlar INNER JOIN kullanicilar ON mesajlar.kullanici_id = kullanicilar.id WHERE mesajlar.id = GELENID
    Bu mantıkla birden fazla tablodaki veriyi select ile secip inner join ile birleştirebilirsin .

    Ornek bir ürün gösterme sorgusu

    SELECT urun.*,motor.model,tipler.type FROM urun INNER JOIN motor ON urun.motor_id = motor.id INNER JOIN tipler ON urun.type_id = tipler.id ORDER BY urun.kva ASC
    Yukarıdaki ornekte
    -urun tablosundaki butun alanlar seciliyor
    -motor tablosusundan gosterilmek istenen model seciliyor
    -tipler tablosundan goruntulenmek istenen tip seciliyor
    -urun tablosundaki motor id = motorlar tablosunda id ile birlestiriliyor
    -ayni sekilde ıkinci inner join ile urun tablosundaki urun type_id ile tipler tablosundaki id birlestirilior ve urun tablosundaki kva degerine gore sort ediliyor.

    daha sonrasinda $row = mysql_fetch_assoc la tek bir kayit alip print_r($row)
    diyerek bir kontrol ettir ciktiyi gor ona gore ekrana bas hocam.
  • 22-10-2010, 21:48:15
    #4
    Üyeliği durduruldu
    Hocam mükemmelsin harika bir şeymiş bu inner join.
    Demekki neymiş ? 4 tane komut öğrenip, "mysql biliyorum" dememek lazımmış

    Çok teşekkürler.
  • 22-10-2010, 21:54:49
    #5
    Orada INNER JOIN yerine LEFT JOIN kullansanız daha iyi olur sanki. INNER JOIN kullandığınızda, mesajı gönderen kişinin üyeliği silindiyse o mesaj gösterilmez.
  • 23-10-2010, 13:17:38
    #6
    Üyeliği durduruldu
    Hocam, kurcaladım birazcık inner join ile left joini. Left join kullanırsam, bütün üyeleri çekecek boşu boşuna. Sanırım en kolayı üye tablosuna 'uyelik' diye bir sütun açıp, normal üyelere "1" yasaklı üyelere "0" vermek

    Cross Join, Straight Join, Natural join gibi ifadeler de varmış. Bunları öğrenebileceğim Türkçe kaynak var mıdır acaba ?
  • 23-10-2010, 21:48:54
    #7
    Hayır left join ile bütün üyeleri çekmez. Sadece o satırdaki üye numarasında bulunan üyeyi çeker.