Aslında sizin burada yapmak istediğiniz
Many to Many relation(ilişki).
Elinizde
urunler ve
kategoriler tablosu varsa ve aralarında ilişki kurmak istiyorsanız, ihtiyacınız olan bu iki tablodaki ID'leri tutabileceğiniz
urunler_kategoriler pivot tablosudur(pivot table).
Veritabanımızın şu şekilde olduğunu düşünelim(
Buradan görsel olarak inceleyebilirsiniz):
CREATE TABLE `kategoriler` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`kategori_adi` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `urunler` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`urun_adi` varchar(255) DEFAULT NULL,
`urun_aciklamasi` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `urunler_kategoriler` (
`urun_id` int(11) DEFAULT NULL,
`kategori_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Yukarıda görebileceğiniz üzere
urunler_kategoriler tablosunda sadece urun_id ve kategori_id tutuyoruz.
Sorgumuz nasıl olabilir: SELECT urun_adi FROM urunler JOIN urunler_kategoriler on urunler_kategoriler.urun_id = urunler.id WHERE urunler_kategoriler.kategori_id = 3
PDO ile çekmek istersek: $db = new PDO('mysql:host=localhost;dbname=urunler', "root", "root");
$db->exec("set names utf8");
$stmt = $db->prepare('SELECT urun_adi FROM urunler JOIN urunler_kategoriler on urunler_kategoriler.urun_id = urunler.id WHERE urunler_kategoriler.kategori_id=:kategori_id');
$stmt->bindValue(':kategori_id', 3);
$stmt->execute();
$urunler = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($urunler);Hızlıca yazdım, aklınıza takılan bir şey olursa sorabilirsiniz. Umarım bir fikir oluşturur.
kolay gelsin!