Detay Verisi Olamayan Ana Kayıtları Listele
Detay Verisi Olamayan Ana Kayıtları Listele
Merhaba,
MySQL 4.0.18 InnoDB tabloları kullanıyorum 2 tablom var birisi müşteri diğeri ürün gibi düşünelim, ürün tabloasunda müşterinin ID nosu var ilişkisel alan olarak benim istediğim altsorgu kullanmadan (MySQL in bu sürümü alt sorgu desteklemiyor) belirttiğim ürüne sahip aynı zamanda şu ürüne sahip olmayan müşterileri listelemek.
Örn: Buzdolabı satın almış fakat fırın satın almamaış müşteriler.
Açıklayıcı oolmuştur umarım iyi çalışmalar.
MySQL 4.0.18 InnoDB tabloları kullanıyorum 2 tablom var birisi müşteri diğeri ürün gibi düşünelim, ürün tabloasunda müşterinin ID nosu var ilişkisel alan olarak benim istediğim altsorgu kullanmadan (MySQL in bu sürümü alt sorgu desteklemiyor) belirttiğim ürüne sahip aynı zamanda şu ürüne sahip olmayan müşterileri listelemek.
Örn: Buzdolabı satın almış fakat fırın satın almamaış müşteriler.
Açıklayıcı oolmuştur umarım iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
join kullanabilirsiniz.
Merhaba,
JOIN ilk aklıma gelen yöntem oldu fakat şöyle bir sorun var bir müşterinin bir çok buzdolabı ürünü varsa o müşteri bir çok kez listeleniyor bunun önüne geçmek istiyorum bir örnekle açıklarsanız sevinirim.
JOIN ilk aklıma gelen yöntem oldu fakat şöyle bir sorun var bir müşterinin bir çok buzdolabı ürünü varsa o müşteri bir çok kez listeleniyor bunun önüne geçmek istiyorum bir örnekle açıklarsanız sevinirim.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Tam emin olamıyorum fakat ben deniyemeceğim için siz bir deneyin bakalım. Şu kod işinizi görebilir.... Tabi burada sadece müşteri isimlerini listeleyebilirsiniz. Yanına ilave bir alan koyunca bahsettiğiniz tekrarlar başlar....
Buzdolabının numarası 5 olsun mesela, Hatta yanında 6 numaralı urunu de almış olanlar fakat 9 numaralı frının ile 10 numarlaı diğer bir ürünü almamış olanlar.....
Kolay gelsin....
Kod: Tümünü seç
Select distinct M.MUSTERI_AD
from MUSTERI M, URUN U
where M.MUSTERI_NO=U.URUN_NO and U.URUN_NO in (5,6) and U.URUN_NO not in (9,10)
Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

Fahrettin abi, tamamdır muşteri id alanına göre distinct uygulayıp gerekli diğer alanları LookupField olarak aldım ilginiz için teşekkür ederim.
İyi çalışmalar.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Merhaba ,
Şimdi yukarıda Fahrettin abinin örneğinde, örneğin 5 ve 6 nolu ürünlerden herhangi birine sahipte olsa ilgili kayıt listeleniyor, mutlaka iki yada daha fazla belirtilen ürüne sahip olupta mutlaka şu ve şu ürünlere sahip olmayanlar cümlesini nasıl oluşturabiliriz, AND işe yaramıyor yaramaması da çok normal. Çok teşekkür ederim şimdiden.
Şimdi yukarıda Fahrettin abinin örneğinde, örneğin 5 ve 6 nolu ürünlerden herhangi birine sahipte olsa ilgili kayıt listeleniyor, mutlaka iki yada daha fazla belirtilen ürüne sahip olupta mutlaka şu ve şu ürünlere sahip olmayanlar cümlesini nasıl oluşturabiliriz, AND işe yaramıyor yaramaması da çok normal. Çok teşekkür ederim şimdiden.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
İsteğiniz tam anlayaamdım ama Sybase'de şöyle bir şey vardı. IN operatoru gibi ALL operatoru vardı. IN gibi icinden sadece bir tanesi ile eşleşmesi değil bütün değerlerin eşleşmesi durumuna gore kayıtları filtreleyebiliyordu.... MySQL de benzer bir operator olabilir..
Kolay gelsin...
Kolay gelsin...
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

Evet tam olarak Sybase deki ALL operatorunun yapması gerekeni yapmaya çalışıyorum, Kesinlikle TV ve buzdolabı olup , kesinlikle çamaşır makinası ve dvd player i olmayanların listesi ama ne yazıkki subquery kullanmamalıyım.İsteğiniz tam anlayaamdım ama Sybase'de şöyle bir şey vardı. IN operatoru gibi ALL operatoru vardı. IN gibi icinden sadece bir tanesi ile eşleşmesi değil bütün değerlerin eşleşmesi durumuna gore kayıtları filtreleyebiliyordu.... MySQL de benzer bir operator olabilir..
MySQL de ALL operatoru çalışmıyor varyasyonlarını araştırıyorum.
Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Exists operatoru standart sql komutudur. Veritabanına ozel bir komut değildir dolayısıyla mysql'de de çalışacaktır diye düşünüyorum... Bir deneyin derim....
Aşağıdaki kod işinizi gorur gibime geliyor... 5 ve 6 numaralı urunler mutlaka olmalı ve de 9 ile 10 numaralu urunler de kesinlikle olmamalı. Diger urunleri de benzer mantıkta query ye ekleyebilirsiniz....
Kolay gelsin....
Aşağıdaki kod işinizi gorur gibime geliyor... 5 ve 6 numaralı urunler mutlaka olmalı ve de 9 ile 10 numaralu urunler de kesinlikle olmamalı. Diger urunleri de benzer mantıkta query ye ekleyebilirsiniz....
Kod: Tümünü seç
Select * from MUSTERI M
where exists(Select 1 from URUN U where M.MUSTERI_NO=U.MUSTERI_NO and U.URUN=5) and
exists(Select 1 from URUN U where M.MUSTERI_NO=U.MUSTERI_NO and U.URUN=6) and
...
...
not exists(Select 1 from URUN U where M.MUSTERI_NO=U.MUSTERI_NO and U.URUN=9) and
not exists(Select 1 from URUN U where M.MUSTERI_NO=U.MUSTERI_NO and U.URUN=10)
...
...
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

İlginize teşekkür ederim,
Ancak SubQuery desteklemiyor MySQL 4.0.18 , versiyon değiştirme ihtimalimde yok, bu komutlar çalışmadı bu yüzden.Bu durumda SQL Cümlesi kullanarak yapamayacağım anlamına geliyor sanırım.
Ancak SubQuery desteklemiyor MySQL 4.0.18 , versiyon değiştirme ihtimalimde yok, bu komutlar çalışmadı bu yüzden.Bu durumda SQL Cümlesi kullanarak yapamayacağım anlamına geliyor sanırım.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Teşekkürler,mkysoft yazdı:functionlar varmıydı hatırlamıyorum 4x'de. Eğer varsa functionları kullanın.
Aslında 4.1 sürümünü bütün müşterilerde güncelleme yapma sorunu olmasa kullanmak isterim ama bu benim için büyük sorun, mevcut 4.0.18 sürümünde function kullanılabiliyormus sitede öyle diyor, forumda firebird için UDF tanımlama örneği var ancak delphi de dll olarak yazdığım fonksiyonları MySQL tanımlama konusunda sorunum var yani hiç bir firim yok, MySQL sitesinde C kodlarıyla derlemeden felan bahsediyor anlayamadım, ilgilenen olduysa daha önce bilgisini rica ediyorum.
Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Tamam şimdi delphide test amaçlı iki integer parametre alıp geriye bunların toplamını integer döndüren bir function DLL i yazdım , MySQL e bu fonksiyonu şu şekilde tanımladım ,
öncelikle bunu tanımlarken bana toplam_init bulunamadı dedi, oysaki DLL de toplam adında tek bir func vardı neyse baktım olacak gibi değil bide toplam_init tanımladım buda parametre almıyor geriye 1 döndürüyor neyse kabül etti, ancak kullanırken bana 23122145454545 gibi saçma bir sonuç veriyor ne sayı gönderirsem göndereyim fark etmiyor, şimdi anladığım kadarıyla yüklemek istediğimiz fonksiyonun xxx_init ve xxxdinit adında iki tane daha initiazilation ve finalization fonksyionu olması lazım tam anlayamadım birde CREATE FUNCTION deyimiden çıkış değerinin tipi belirtiliyor lakin kaç giriş parametresi olacak tipleri nelerdir gibi birtanımlama yok, oldukça kafam karıştı işin içinden çıkamadım.
Kod: Tümünü seç
CREATE FUNCTION toplam RETURNS INTEGER SONAME 'first.dll'
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Temporary table kullanarak çözülebiliyor.
Netice olarak bu şekilde gidilerek istenilen sonuca ulaşılabilir, php vasıtasıyla sorguyu dondurmeyi denedim ancak bir yerde takıldım fakat phpmyadminden istediğim sonucu alabildim. Gerçi sorguları yazdıkça saçmalamışım gibime geldi ama bir şekilde sonuca ulaşılmış oluyor
. Mantık subquery de alacağımız sonuçları geçici tablolara atıp oradan kullanmak. Mysql 4.0 üzerinde temporary table ların destekleniyor olması lazım. Kolay gelsin
Kod: Tümünü seç
CREATE TEMPORARY TABLE urunler_var SELECT cari_id, urun_id
FROM urun_satis
WHERE urun_id =1
UNION
SELECT cari_id, urun_id
FROM urun_satis
WHERE urun_id =2;
/* yukardaki ürünlere sahip tüm üyeler */
create temporary table cariler
SELECT cari_id
FROM urunler_var
group by cari_id
having count(cari_id) = 2;
/* Her 2 ürüne de sahip olanları görmek istediğmden burada 2 değeri dönmesi gerekiyor ve değişken olarak 2 koyuyorum */
create temporary table cari_ve_kac_adet
select c.cari_id, count(c.cari_id) from cariler c
inner join urun_satis us on c.cari_id = us.cari_id
group by c.cari_id;
select * from cari_ve_kac_adet;
