ürün tablosu ve stok tablosu var.
sitede arama yapılacak. ve sorgu şu şekilde çalışacak:
ürünler tablosundaki arama kelimesiyle eşleşen satırları bul, bu satırlardaki barkodu bir stoklar tablosunda sorgulayıp kaç adet olduğunu bul.
stok listesinde adı olmaya da bilir ki sorunu bu çıkarıyor. şimdi bunu şu şekilde sorguluyorum:
SELECT k.barkod, k.urun FROM urunler AS k
INNER JOIN stok as st on st.barkod=k.barkod
where urun='.$arama.'
ancak anladığım kadarıyla bu sorgu şu anlama geliyor: arama yaptığın kelimeyle eşleşen barkodları stoklarda sorgula. ve stoklarda da eşleşenleri bastır. stoklarda bulunamayanları bastırma.
bu da haliyle, benim istediğim şey değil çünkü stokta olmayan ürünü hiçbir şekilde göstermiyor.
ben istiyorum ki:
a ürünü stokta 2 adet var
b ürünü stokta 0 adet var
c ürünü stokta 1 adet var
şeklinde sonuç versin.
not: ürünler tablosunda "stok" isimli ek bir sütun açamam, çünkü dediğim gibi kod esasında biraz daha karmaşık ve ben özet geçtim. benim bunu bu şekilde halletmem gerekiyor.
ürüne ait stoklar tablosunda ürünle ilgili hiç veri yoksa sonuç döndürmeyecektir. daha önce girdi yapıldıysa stok 0 olsa bile dönecek çünkü bu query'de onla ilgili bir kontrol yok.
stoklar tablosuna o ürünle ilgili daha önce hiç veri girilmediyse inner join yerine left join kullanılabilir (örnek query için), böylece sonuç dönecek ama stok tablosundaki sütunlar null gelecektir.
@tull hah tamamdır çok teşekkürler. aradığım demek left join.
çalışayım
şu şekilde de yapabilirsin
select k.barkod,k.urun,
(select sum(stok) from stok s where s.barkod=k.barkod) adet
from urunler k
where urun='.$arama.'
stokta olup da ürünler tablosunda olmayanları da görmek istiyorsan full outer join de yapabilirsin. bu haliyle ürün tablosuna stok tablosuna ekliyor sadece.