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!