Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

php join sorunu

Merhaba arkadaşlar,

Join konusunda 2 soru sormak istiyorum. 

1) sitemde 3 bölüm var ve haliyle her bölümün konumu farklı. Yani konuları sağ sol ve orta oalrak sıraladım.

Şimdi tek join sorgusu ile bu 3 konumun içeriğini ve resimlerini nasıl çekebilirim ? 

konum=1 // sağ taraf
konum=2 // orta
konum=3 // sol taraf

2. sorum: 

konuları çekiyorum bilgileri alıyorum ve başka bir tabloda bulunan konu ile ilgili resimleri çekerken sadece 1 resim geliyor. konuyla ilgili Resimlerin tümünü nasıl alabilirim ?
+0
-1
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • 1
    Kesali adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    208 cevap - 2 soru
    Join aynı matematikteki kümelere benzer. LEFT join işlemi iki veya daha fazla tablonun kesişen elemanları ve soldaki tablodaki elemanları getirir. RIGHT join ise iki veya daha fazla tablonun kesişen elemanları ve sağdaki tablodaki elemanları getirir. INNER join ise iki veya daha fazla tablonun sadece kesişen elemanları getirir.
    JOIN ise (full join) her iki tabloyu olduğu gibi getirir. Aşağıdaki resmi inceleyerek çok daha iyi anlayabilirsin.

    http://kb.lexo.ch/wp-content/uploads/2012/06/Visual_SQL_JOINS_orig.jpg
    1. Soruna gelirsek.
    Site içeriğin tam olarak nedir ona göre bir tablo yapısı kurmalısın. Mesela üst menude kategoriler var diyelim orta kısımda ürünler vs solda ise reklam alanı olsun. Bu durumda join kullanamazsın öncelike sorgudaki elemanların ortak birşeyi olması lazım.

    Resim galerisi mesela en güzel join örneğidir. resimkategori ve resimler diye iki tablo açıp resimkategori id sini resimlere verdiğin zaman join ile o kategoriye ait tüm resimleri çekebilirsin.

    İlerde ORM kullanırsan bu gidi join işlemlerinin ne kadar kolaylık sağladığını fark edersin.

    2. sorun ise. Kod örneği versen daha detaylı cevap verebilirdim. Tek resim geliyorsa ya döngü kısmında bir sorun vardır (while foreach vs) veya limit kullanıyor olabilirsin.
    • zero_three adlı üyenin fotoğrafı zero_three
      2. Soruya örnek olarak bu şekilde bir kod deniyorum ancak istediğim sonuçu alamıyorum.

      <?php
      
      	require_once("baglanti.php");
      		$q	= mysql_query("select * from urunler left join resimler on urunler.id = resimler.resimid group by urunler.id");
      			while($query = mysql_fetch_array($q)){
      						
      			echo $query["urunadi"]."<br>";
      			echo $query["resimadi"]."<br>";
      			
      		}
      ?>
      


      Yapmak istediğim ürüne ait tüm resimleri çekmek. Şu şekilde bir sonuç istiyorum yani

      Ürün adı : Asus i7 işlemcili Notebook
      resim1.jpg resim2.jpg resim3.jpg vs vs
      10 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      group by urunler.id kısmına gerek yok ki. Ürünler id si tek ve hepsinde ortak olduğu için group by urunler.id ile tek ürün gelmesi normal.
      10 yıl önce yazılmış
    • zero_three adlı üyenin fotoğrafı zero_three
      Zaten benim istediğim ürün ve o ürüne ait kaç adet resim varsa onların gelmesi. Group by bölümünü kaldırdığımda kaç adet ürün resmi varsa ürün adı da o kadar geliyor.
      10 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Group by ile aynı urunler.id ye sahip resimleri grop haline yani tek bir veriye çeviriyorsunuz. left join yerine inner join kullanın ve group by ı kaldırın.

      Yani

      <?php
       
          require_once("baglanti.php");
              $q  = mysql_query("select * from urunler inner join resimler on urunler.id = resimler.resimid");
                  while($query = mysql_fetch_array($q)){
                               
                  echo $query["urunadi"]."<br>";
                  echo $query["resimadi"]."<br>";
                   
              }
      ?>
      


      Not: resimler.resimid urunlerin id si ile aynı olmalı
      10 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Birde
      echo $query["urunadi"]."<br>";
      
      Kısmını döngü içine koymuşsun ürün isminin tekrar etmesi normal. While döngüsünün üzerinde bir yerde ürün ismini çağırmalısın. mysql_result kullanabilirsin.
      10 yıl önce yazılmış