PDA

Orijinalini görmek için tıklayınız : MySQL inner join hakkında nerede yanlış yapıyorum?


Vosvos
27-09-2017, 17:43:41
merhaba arkadaşlar,
3 adet tablom mevcut
rapor tablosu (id,firma,ilkil,ilkilce,fiyat,sonrail,sonrailce)
il tablosu (id, il_adi)
ilce tablosu (id, ilce_adi)
oluşturduğum sorgu:

$sorgu=mysql_query("select rapors.*,il.il_adi,ilce.ilce_adi from rapors INNER JOIN il ON rapors.ilkil= il.id INNER JOIN ilce ON rapors.ilkilce= ilce.id");

rapor tablosu ile inner join kurdum fakat sonrail ve sonrailce sütunlarını hiçe sayıyor ve ilkil ve ilkilce verilerinin çıktısını veriyor.
iki adet il ve ilçe seçimim var fakat ikisine de aynı il ilçeyi veriyor

<?php echo $ogrenci['il_adi']; ?> / <?php echo $ogrenci['ilce_adi']; ?>

nerede hata yapıyorum acaba?

coder16
27-09-2017, 20:57:08
dostum yardımcı olayım dedim ama sorduğun sorudan hiç bişey anlamadım, özellikle şu kısımdan rapor tablosu ile inner join kurdum fakat sonrail ve sonrailce sütunlarını hiçe sayıyor ve ilkil ve ilkilce verilerinin çıktısını veriyor.
inner join kurdum ne demek ?
sutunlari hiçe sayıyor ne demek ?
Bence sen soruyu bir daha toparlayıp öyle sor ve yazmış olduğun php kodlarıyla beraber buraya ekle, sanırım böyle daha iyi yardımcı oluruz.

greyder
27-09-2017, 21:39:43
ne sorduğunu anlamadım ama ilk bakışta gördüklerim şunlar

rapor tablosu (id,firma,ilkil,ilkilce,fiyat,sonrail,sonrailce)
il tablosu (id, il_adi)
ilce tablosu (id, ilce_adi)

öncelikle tablolar arasında bir bağlantı kuracaksan ortak bir bağlantı elemanına ihtiyacın var
eğer id ortak bağlantı elemanın değilse,

yani sorgunda 3 tablodanda aynı id ye ait verileri çekmeyeceksen 2. ve 3. tablonda başka ortak sütun yok burdan devam edemezsin

varsayalım ki 3 tablodan aynı id ye sahip verileri çekeceksin




SELECT
a.id,
a.firma,
a.ilkil,
a.ilkilce,
a.fiyat,
a.sonrail,
a.sonrailce,
b.id,
b.il_adi,
c.id,
c.ilce_adi

FROM
rapor tablosu a,
il b,
ilce c

WHERE
a.id=b.id and a.id=c.id



bu sorgunun sonuçlarını foreach yada while ile döndürebilirsiniz
yeni where koşulları ekleyerek sorguyu daraltabilir, tek bir id yi sorgulayabilirsiniz.

Vosvos
27-09-2017, 23:57:11
dostum yardımcı olayım dedim ama sorduğun sorudan hiç bişey anlamadım, özellikle şu kısımdan
inner join kurdum ne demek ?
sutunlari hiçe sayıyor ne demek ?
Bence sen soruyu bir daha toparlayıp öyle sor ve yazmış olduğun php kodlarıyla beraber buraya ekle, sanırım böyle daha iyi yardımcı oluruz.

ne sorduğunu anlamadım ama ilk bakışta gördüklerim şunlar

rapor tablosu (id,firma,ilkil,ilkilce,fiyat,sonrail,sonrailce)
il tablosu (id, il_adi)
ilce tablosu (id, ilce_adi)

öncelikle tablolar arasında bir bağlantı kuracaksan ortak bir bağlantı elemanına ihtiyacın var
eğer id ortak bağlantı elemanın değilse,

yani sorgunda 3 tablodanda aynı id ye ait verileri çekmeyeceksen 2. ve 3. tablonda başka ortak sütun yok burdan devam edemezsin

varsayalım ki 3 tablodan aynı id ye sahip verileri çekeceksin


SELECT a.id, a.firma, a.ilkil, a.ilkilce, a.fiyat, a.sonrail, a.sonrailce, b.id, b.il_adi, c.id, c.ilce_adi FROM rapor tablosu a, il b, ilce c WHERE a.id=b.id and a.id=c.id
bu sorgunun sonuçlarını foreach yada while ile döndürebilirsiniz
yeni where koşulları ekleyerek sorguyu daraltabilir, tek bir id yi sorgulayabilirsiniz.

anlatamadığım için kusruma bakmayın lütfen bir çok problemden ötürü kafam oldukça dolu. eve geldiğimde yazdıklarımdan ben de bir şey anlamadım. şimdi tane tane anlatma fırsatı bulmuş durumdayım.

3 adet tablom mevcut, bunlar:
rapors tablosu (id, firma, birinci_il, birinci_ilce, fiyat, ikinci_il, ikinci_ilce)
il tablosu (id, il_adi) - rapors tablosundaki birinci_il ve ikinci_il idleri buradaki id ile aynı
ilce tablosu (id, ilce_adi) rapors tablosundaki birinci_ilçe ve ikinci_ilçe idleri buradaki id ile aynı

rapor-gonder.php sayfamda rapors tablosunun tamamını dolduruyorum birinci_il birinci_ilce ve ikinci_il, ikinci_ilce ise il tablosundaki idlerine göre ekleniyor.

rapor-goster.php sayfasında ise rapors tablosundaki verileri listeletiyorum fakat birinci il ilçe ve ikinci il ilçe kısmını il ve ilçe tablosundan isimlerini yazdıramıyorum.

inner join kullanarak aşağıda bulunan kodu oluşturdum:

$sorgu=mysql_query("select rapors.*,il.il_adi,ilce.ilce_adi from rapors INNER JOIN il ON rapors.birinci_il= il.id INNER JOIN ilce ON rapors.birinci_ilce= ilce.id");

sorguyu bu şekilde yaptığımda listeleme şu şekilde oluyor

ID - A Firması - Kocaeli / Darıca - 400 TL - Kocaeli / Darıca

rapors tablosunda birinci il ve birince ilçe kocaeli darıca doğru iken ikinci_il ve ikinci_ilçe ise ankara/çankaya idlerini taşımakta.

yani ben birinci_il ve birinci_ilçe için inner join kullandım fakat ikincisi için kuramadım.

umarım anlatabilmişimdir :(

coder16
28-09-2017, 00:28:13
anlatamadığım için kusruma bakmayın lütfen bir çok problemden ötürü kafam oldukça dolu. eve geldiğimde yazdıklarımdan ben de bir şey anlamadım. şimdi tane tane anlatma fırsatı bulmuş durumdayım.

3 adet tablom mevcut, bunlar:
rapors tablosu (id, firma, birinci_il, birinci_ilce, fiyat, ikinci_il, ikinci_ilce)
il tablosu (id, il_adi) - rapors tablosundaki birinci_il ve ikinci_il idleri buradaki id ile aynı
ilce tablosu (id, ilce_adi) rapors tablosundaki birinci_ilçe ve ikinci_ilçe idleri buradaki id ile aynı

rapor-gonder.php sayfamda rapors tablosunun tamamını dolduruyorum birinci_il birinci_ilce ve ikinci_il, ikinci_ilce ise il tablosundaki idlerine göre ekleniyor.

rapor-goster.php sayfasında ise rapors tablosundaki verileri listeletiyorum fakat birinci il ilçe ve ikinci il ilçe kısmını il ve ilçe tablosundan isimlerini yazdıramıyorum.

inner join kullanarak aşağıda bulunan kodu oluşturdum:
$sorgu=mysql_query("select rapors.*,il.il_adi,ilce.ilce_adi from rapors INNER JOIN il ON rapors.birinci_il= il.id INNER JOIN ilce ON rapors.birinci_ilce= ilce.id");
sorguyu bu şekilde yaptığımda listeleme şu şekilde oluyor

ID - A Firması - Kocaeli / Darıca - 400 TL - Kocaeli / Darıca

rapors tablosunda birinci il ve birince ilçe kocaeli darıca doğru iken ikinci_il ve ikinci_ilçe ise ankara/çankaya idlerini taşımakta.

yani ben birinci_il ve birinci_ilçe için inner join kullandım fakat ikincisi için kuramadım.

umarım anlatabilmişimdir :(
Sen rapors tablosundan veri çekerken inner join ile diğer 2 tabloyu birbirine bağlamışsın, buraya kadar doğru.
Veri olarak gelenler mi yanlış diyorsun ?
Örnek veriyi yazabilirmisin, hem rapors tablosundan hem de il, ilce tablosundan. (Veritabanında ne kayıtlı onu görelim)

disconnect
28-09-2017, 00:33:37
Önce il tablosunda ki id numarasını ilçe tablosuna da kaydetmelisin ki bağlantı kurabilesin.

O ilçenin hangi ile ait olduğunu anlamak için ilçe tablosunda il_id olmalı.
Firma tablosundaki il_id ve ilçe tablosundaki il_id ve il tablosunda ki id ler aynı olacak.
Tek sorguda join yapabilmen için yukarıda saydıklarımı yapman gerek.

Vosvos
28-09-2017, 00:37:37
dostum yardımcı olayım dedim ama sorduğun sorudan hiç bişey anlamadım, özellikle şu kısımdan
inner join kurdum ne demek ?
sutunlari hiçe sayıyor ne demek ?
Bence sen soruyu bir daha toparlayıp öyle sor ve yazmış olduğun php kodlarıyla beraber buraya ekle, sanırım böyle daha iyi yardımcı oluruz.

Sen rapors tablosundan veri çekerken inner join ile diğer 2 tabloyu birbirine bağlamışsın, buraya kadar doğru.
Veri olarak gelenler mi yanlış diyorsun ?
Örnek veriyi yazabilirmisin, hem rapors tablosundan hem de il, ilce tablosundan. (Veritabanında ne kayıtlı onu görelim)

birinci_il id= 1 birinci_ilçe id = 1
ikinci_il id = 2 ikinci_ilçe id= 2
gelen veri inner joinden önce:

ID - A Firması - 1(birinci_il id) / 1 birinci_ilce id) - 400 TL - 2 (ikinci_il id) / 2 ikinci_ilce id)
gelen veri inner joinden sonra:
ID - A Firması - Kocaeli / Darıca - 400 TL - Kocaeli / Darıca
olması gereken
ID - A Firması - Kocaeli / Darıca - 400 TL - Ankara / Çankaya
yani ikinci_il ve ikinci_ilce için inner join kuramadım
kocaeli = 1

darıca = 1

ankara = 2
çankaya = 2

<?php echo $ogrenci['il_adi']; ?> / <?php echo $ogrenci['ilce_adi']; ?>


bu sorgu ile il ilçe verisini çekmekteyim her iki il ilçe içinde aynı sorguyu kullanıyorum

--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:37:37 -->-> Daha önceki mesaj 00:33:47 --

Önce il tablosunda ki id numarasını ilçe tablosuna da kaydetmelisin ki bağlantı kurabilesin.

O ilçenin hangi ile ait olduğunu anlamak için ilçe tablosunda il_id olmalı.
Firma tablosundaki il_id ve ilçe tablosundaki il_id ve il tablosunda ki id ler aynı olacak.
Tek sorguda join yapabilmen için yukarıda saydıklarımı yapman gerek.

söylediklerinin tamamı hazır hocam ilk alıntıladığım kısımda örnekle gösterdim

disconnect
28-09-2017, 00:46:03
Firma: il_id
İller: id
İlçe: il_id
SELECT * FROM firma as F INNER JOIN iller as il ON F.il_id=il.id INNER JOIN ilce as ilc ON il.id=ilc.il_id

buna göre düzenlersen hatasız sorgularsın.

coder16
28-09-2017, 01:05:41
yani ikinci_il ve ikinci_ilce için inner join kuramadım
Bunun için zaten inner join kullanamazsın. Sen rapors tablosundan çıkan verileri il ve ilce tablosundaki verilerle karşılaştırman lazım.

Senin ne yapmak istediğini tam olarak anladım, fakat bunu ya SELECT IN SELECT (Sorgu içinde sorgu) ile ya da sadece rapors tablosundaki verileri çektikten sonra il ve ilçe tablosundaki verilerle karşılaştırarak yapabilirsin. Yani rapors sorgusundan çıkan verileri il ve ilçe SQL i ile sorgulayarak öğrenebilirsin.
Çünkü sen rapors verilerini il ve ilçe verileri ile karşılaştırmak istiyorsun.
Eğer yüksek veriler ile çalışacaksan Sorgu içinde sorgu çalıştırmanı tavsiye etmem.
Şu kod sanırım senin istediğin veriyi verecek.

select il.il_adi,ilce.ilce_adi, (SELECT il.il_adi FROM il WHERE il.id = rapors.ikinci_il) as ikinci_il, (SELECT ilce.ilce_adi FROM ilce WHERE ilce.id = rapors.ikinci_ilce) as ikinci_ilce from rapors INNER JOIN il ON rapors.birinci_il= il.id INNER JOIN ilce ON rapors.birinci_ilce= ilce.id

Vosvos
28-09-2017, 01:10:36
Senin ne yapmak istediğini tam olarak anladım, fakat bunu ya SELECT IN SELECT (Sorgu içinde sorgu) ile ya da sadece rapors tablosundaki verileri çektikten sonra il ve ilçe tablosundaki verilerle karşılaştırarak yapabilirsin. Yani rapors sorgusundan çıkan verileri il ve ilçe SQL i ile sorgulayarak öğrenebilirsin.
Çünkü sen rapors verilerini il ve ilçe verileri ile karşılaştırmak istiyorsun.
Eğer yüksek veriler ile çalışacaksan Sorgu içinde sorgu çalıştırmanı tavsiye etmem.
Şu kod sanırım senin istediğin veriyi verecek.
select il.il_adi,ilce.ilce_adi, (SELECT il.il_adi FROM il WHERE il.id = rapors.ikinci_il) as ikinci_il, (SELECT ilce.ilce_adi FROM ilce WHERE ilce.id = rapors.ikinci_ilce) as ikinci_ilce from rapors INNER JOIN il ON rapors.birinci_il= il.id INNER JOIN ilce ON rapors.birinci_ilce= ilce.id


bu sorgu ile veri çekerken
1. il ilçe için <?php echo $ogrenci['il_adi']; ?> / <?php echo $ogrenci['ilce_adi']; ?>
2. il ilçe için <?php echo $ogrenci['ikinci_il']; ?> / <?php echo $ogrenci['ikinci_ilce']; ?>
bu şekilde kullanmalıyım doğru mu hocam?

--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 01:10:36 -->-> Daha önceki mesaj 01:10:04 --

Firma: il_id
İller: id
İlçe: il_id
SELECT * FROM firma as F INNER JOIN iller as il ON F.il_id=il.id INNER JOIN ilce as ilc ON il.id=ilc.il_id

buna göre düzenlersen hatasız sorgularsın.

teşekkürler hocam bunu da deneyeceğim.

coder16
28-09-2017, 01:12:51
bu sorgu ile veri çekerken
1. il ilçe için <?php echo $ogrenci['il_adi']; ?> / <?php echo $ogrenci['ilce_adi']; ?>
2. il ilçe için <?php echo $ogrenci['ikinci_il']; ?> / <?php echo $ogrenci['ikinci_ilce']; ?>
bu şekilde kullanmalıyım doğru mu hocam?
.

Evet, bu şekilde kullanabilirsin.
print_r($ogrenci); yaparak sorgunun hangi verileri getirdiğini öğrenebilirsin.