Selam,
Sorunu şöyle açıklayayım;
Örneğin ürünler ve kategoriler tablom var. Many to many ilişki var aralarında ama fazladan bi ilişki tablosu oluşturmak yerine kategori id leri ürünler tablosunda cat isimli sütunda ,4,1,9,5,3,12, şeklinde tutuluyor. Durum böyle olunca kategori bazlı arama yapmak da sıkıntı oluyor. Mesela gelişmiş arama bölümü yapmaya çalışırken kullanıcı 4 ve 12 id li kategorileri seçtiği zaman nasıl arama yaptırabilirim?
Şimdiden teşekkürler.
MySql'de ilişki tablosu olmadan kategori bazlı arama
6
●585
- 31-05-2015, 16:53:47
- 31-05-2015, 17:59:02Merhaba, ilişki olmadan nasıl yapmayı planlıyorsunuz?
Sorunuzun cevabına gelecek olursak;
Veritabanı belirtmemişsiniz o yüzden mysql'de gösteriyorum. Bir hostinginiz varsa phpMyAdmin'den bir veritabanı oluşturup aşağıdaki sql'i import edin.
CREATE TABLE IF NOT EXISTS `kategoriler` ( `kat_id` int(11) NOT NULL, `katAdi` varchar(225) COLLATE utf8_turkish_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=5 ; INSERT INTO `kategoriler` (`kat_id`, `katAdi`) VALUES (1, 'Bilgisayar'), (2, 'Telefon'), (3, 'Ev elektroniği'), (4, 'Kozmetik'); CREATE TABLE IF NOT EXISTS `kategori_secimleri` ( `id` int(11) NOT NULL, `urun_id` int(11) NOT NULL, `kat_id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; INSERT INTO `kategori_secimleri` (`id`, `urun_id`, `kat_id`) VALUES (1, 1, 1), (2, 2, 1), (3, 3, 1), (4, 4, 1), (5, 5, 2), (6, 6, 2), (7, 7, 2), (8, 8, 2), (9, 9, 3), (10, 10, 3), (11, 11, 3), (12, 12, 4), (13, 13, 4); CREATE TABLE IF NOT EXISTS `urunler` ( `urun_id` int(11) NOT NULL, `urunAdi` varchar(225) COLLATE utf8_turkish_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=14 ; INSERT INTO `urunler` (`urun_id`, `urunAdi`) VALUES (1, 'Asus M32AD-TR012S Intel Core i3 4160'), (2, 'Asus ET2030IUT-B004R Intel Core i3 '), (3, 'MSI ADORA 20 5M-015TR AMD E2-6110 '), (4, 'Asus ET2232IUK-BC005R Intel Pentium '), (5, 'Samsung Galaxy Note 4 N910CQ\r\n'), (6, 'Samsung Galaxy Trend Plus S7580\r\n'), (7, 'General Mobile 4G Android One'), (8, 'Apple iPhone 6 128 GB (Gold)'), (9, ' \r\nLG 42LB580N 42" Smart FULL HD LED Ekran'), (10, ' \r\nAxen 32" Kapadokya UsbMovie LED (Sunny Elektronik A.Ş. Garantisindedir.)'), (11, ' \r\nTefal FV4486 Supergliss 2300W Ultragliss Tabanlı Buharlı Ütü'), (12, 'Elizabeth Arden 5Th Avenue Edp 125 Ml Spray Kadın Parfüm'), (13, '\r\n Azzaro Pour Homme Edt 100 Ml Erkek Parfümü Azzaro Pour Homme Edt 100 Ml Erkek Parfümü'); ALTER TABLE `kategoriler` ADD PRIMARY KEY (`kat_id`); ALTER TABLE `kategori_secimleri` ADD PRIMARY KEY (`id`); ALTER TABLE `urunler` ADD PRIMARY KEY (`urun_id`); ALTER TABLE `kategoriler` MODIFY `kat_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5; ALTER TABLE `kategori_secimleri` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=14; ALTER TABLE `urunler` MODIFY `urun_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=14;
Aşağıdaki SQL kodu ile tüm ürünleri gösterebilirsin. İlişki durumları ile birlikte.
SELECT urunler.urun_id,urunler.urunAdi,kategoriler.kat_id,kategoriler.katAdi FROM `urunler` LEFT JOIN kategori_secimleri ON kategori_secimleri.urun_id = urunler.urun_id LEFT JOIN kategoriler ON kategori_secimleri.kat_id = kategoriler.kat_id
Senin sorunun cevabı burada.
SELECT urunler.urun_id,urunler.urunAdi FROM kategori_secimleri LEFT JOIN urunler ON urunler.urun_id = kategori_secimleri.urun_id WHERE kategori_secimleri.kat_id IN(1,2)
Çok fazla dikkat etmedim. Büyük verilerde problem yaşayabilirsin. - 31-05-2015, 18:50:29Ürünler tablonuzu Kategoriler ile eşleştirme yapmazsanız, Ürünler bölümündeki Kategori ID'lerinin hiç bir değeri kalmaz.
Sent from my iPhone using Tapatalk - 31-05-2015, 19:08:48Cevaplarınız için teşekkür ediyorum fakat başlıkta da belirttiğim gibi herhangi bir ilişki tablosu mevcut değil. Veri tabanını ben oluşturmadım mevcut bir sistem üzerinden ilerliyorum.
2 tablo var;
ürünler ve kategoriler
many to many ilişki yapmak için gereken ilişki tablosu mevcut değil, bunun yerine ürünler tablosunda kategoriler isimli bir alanda ,1,5,2,3,7,9, şeklinde tutulmuş ürünün dahil olduğu kategoriler.
Zaten benim sıkıntım da bu, bi ilişki tablosu olsa yazdığınız gibi inner joinle kolayca yapılabilecek bir işlem. - 31-05-2015, 19:14:09Kategoriler tablosundaki kategori ID ile Ürünler tablosundaki Kategori ID aynı değilse ki anladığıma göre değil o zaman ürünleri insert ederken gönderilen sorguyu bu işleme uygun hale getirebilirsiniz.
Sonuca daha hızlı ulaşmak için buraya veritabanınızın mimarisini kavrayabileceğimiz bir görsel koyarmısınız
Sent from my iPhone using Tapatalk - 31-05-2015, 19:22:19Kategoriler tablosu;
http://i.imgur.com/ZXuT0Wg.png
Ürünler tablosu;
http://i.imgur.com/LZwP5BT.png
Örnek kayıt;
http://i.imgur.com/ymcQdDm.png - 31-05-2015, 19:48:13Son attığınız görselin 1. Sıradındaki ID'si 2 olan ürün Romance ve Shoujo kategorilerinde dimi?
Sent from my iPhone using Tapatalk
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 19:48:13 -->-> Daha önceki mesaj 19:29:25 --
Ürünler tablosundaki cat ile Kategoriler tablodundaki id colonlarını eşleştirirseniz sonuç alabilirsiniz.
Sent from my iPhone using Tapatalk