• 11-07-2015, 17:48:02
    #1
    Merhaba arkadaşlar,

    Eklediğim bir ürünü birden fazla kategoriye eklemek için

    Ürünleri eklerken birden fazla kategori seçiorum ve ürünün kategori bölümüne id değerleri 1,2,3,4 şeklinde ekleniyor.

    Ancak kategoriye ait ürünleri listelerken

    sadece 1 kategoride görünüyor ürün. Diğerlerinde çıkmıyor.

    Sorgu bu şekilde

    mysql_query("select * from urunler where katid IN ($katid)");
    Sorunun Kaynağı Ne olabilir ?
  • 11-07-2015, 18:37:04
    #2
    Ürünler tablosundaki katid bölümüne string olarak "1,2,3,4" giriyorsanız verdiğiniz select sorgusuyla çekemezsiniz.

    Ya ayrı satır olarak gireceksiniz her ürünü ve kategorisini, ya da select sorgusunda LIKE kullanabilirsiniz.
  • 11-07-2015, 18:41:37
    #3
    _LosT_ adlı üyeden alıntı: mesajı görüntüle
    Ürünler tablosundaki katid bölümüne string olarak "1,2,3,4" giriyorsanız verdiğiniz select sorgusuyla çekemezsiniz.

    Ya ayrı satır olarak gireceksiniz her ürünü ve kategorisini, ya da select sorgusunda LIKE kullanabilirsiniz.
    Örnek bir sorgu paylaşabilir misiniz ?
  • 12-07-2015, 03:31:03
    #4
    Bahsettiğiniz veriyi şu şekilde alabilirsiniz;

    <?php
    mysql_query("SELECT * FROM urunler WHERE find_in_set('".$katid."', katid) <> 0");
    ?>
    Ek bilgi olarak, mysql_query dahil tüm eski mysql fonksiyonları PHP 5.5'te kullanımdan kalkacak. İleriye dönük veya dağıtımını yapacağınız bir yazılım yapıyorsanız PDO veya MySQLi öneririm.
  • 12-07-2015, 14:06:26
    #5
    sewakldawk adlı üyeden alıntı: mesajı görüntüle
    Bahsettiğiniz veriyi şu şekilde alabilirsiniz;

    <?php
    mysql_query("SELECT * FROM urunler WHERE find_in_set('".$katid."', katid) <> 0");
    ?>
    Ek bilgi olarak, mysql_query dahil tüm eski mysql fonksiyonları PHP 5.5'te kullanımdan kalkacak. İleriye dönük veya dağıtımını yapacağınız bir yazılım yapıyorsanız PDO veya MySQLi öneririm.
    Hocam teşekkürler ancak bu şekilde de alamadım

    Kategori bölümünde tek id yazılı olan ürünler geliyor ancak 1,2,3 şeklinde yazılanlar gelmiyor.
  • 12-07-2015, 16:50:24
    #6
    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!