Cevaplar
-
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
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 vs10 yıl önce yazılmış -
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
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
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
Birdeecho $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ış
-