folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder Mysql One-To Many Relation Sorusu



Mysql One-To Many Relation Sorusu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SSPPSS
    SSPPSS's avatar
    Kayıt Tarihi: 26/Ağustos/2007
    Erkek

    selam beyler öncelikle tablo yapılarım aşağıdaki gibi : posts - categories ve post_category_relations diye üç tablom var, tahmin ediceğiniz gibi birinde postlar birinde kategoriler birinde post-kategori ilişkileri var.her bir postun birden fazla kategorisi olabilmesi için bu şekilde bir yapı tercih ettim

     

    mysql> describe post_category_relations;
    +-------------+---------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-------------+---------+------+-----+---------+----------------+
    | relation_id | int(11) | NO | PRI | NULL | auto_increment |
    | post_id | int(11) | NO | | NULL | |
    | category_id | int(11) | NO | | NULL | |
    +-------------+---------+------+-----+---------+----------------+
    3 rows in set (0.01 sec)

    mysql> describe posts;
    +---------+--------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+----------------+
    | post_id | int(11) | NO | PRI | NULL | auto_increment |
    | title | varchar(255) | YES | | NULL | |
    | content | text | YES | | NULL | |
    | date | datetime | YES | | NULL | |
    | active | tinyint(1) | YES | | NULL | |
    +---------+--------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)

    mysql> describe categories;
    +----------+--------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+--------------+------+-----+---------+----------------+
    | cat_id | int(11) | NO | PRI | NULL | auto_increment |
    | cat_name | varchar(255) | YES | | NULL | |
    +----------+--------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)

    ___

    Kullandığım sorgu şu şekilde amacım sadece kategori id si 2 olan postları çekmek olsun mesela, having le yapabildim sadece where falan kullanınca hata verdi sürekli, having like %% kullanınca da kategori id si 2 olanla 21 olanı ayıramıyorum, nettede adam gibi örnek bulamadım yardımlarınızı bekliyorum: 

    SELECT posts . * , (
    SELECT GROUP_CONCAT( DISTINCT categories.cat_name )
    FROM categories
    LEFT JOIN post_category_relations ON post_category_relations.category_id = categories.cat_id
    WHERE post_category_relations.post_id = `posts`.post_id
    GROUP BY post_category_relations.post_id
    ) AS category, (
    SELECT GROUP_CONCAT( DISTINCT categories.cat_id )
    FROM categories
    LEFT JOIN post_category_relations ON post_category_relations.category_id = categories.cat_id
    WHERE post_category_relations.post_id = `posts`.post_id
    GROUP BY post_category_relations.post_id
    ) AS cate_id
    FROM (`posts`
    )
    HAVING `cate_id` LIKE '%2%'
    LIMIT 0 , 30

     

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    iç içe çok select kullanmışsın, performans sıfır :)

    mssql için yazıyorum,

    select p.*,c.* from post_category_relations PCR

    INNER JOIN posts p in p.postsId = PCR.postsId

    Inner JOIN category c in c.categoryId = PCR.categoryID

    WHERE PCR.categoryID  = 2

     

    kolay gelsin


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SSPPSS
    SSPPSS's avatar
    Kayıt Tarihi: 26/Ağustos/2007
    Erkek
    SharpShooter bunu yazdı

    iç içe çok select kullanmışsın, performans sıfır :)

    mssql için yazıyorum,

    select p.*,c.* from post_category_relations PCR

    INNER JOIN posts p in p.postsId = PCR.postsId

    Inner JOIN category c in c.categoryId = PCR.categoryID

    WHERE PCR.categoryID  = 2

     

    kolay gelsin

    hocu mysql de çalışmadı bu , aynı mantıkla tekrar yazdım yine olmadı benmi yanlış yapıyorum :/ deli oldum amnk.wordpress e baktım şimdi adamlar 3-4 sorguda yapmış tek sorguda yapmak istiyorum ben

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Austen
    Austen's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek

     

    inner joindeki in'leri on'a çevirirsen mysql'de de çalışması gerekiyor.

    Austen tarafından 26/Eki/12 10:17 tarihinde düzenlenmiştir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SSPPSS
    SSPPSS's avatar
    Kayıt Tarihi: 26/Ağustos/2007
    Erkek
    Slothere bunu yazdı
    SharpShooter bunu yazdı

    iç içe çok select kullanmışsın, performans sıfır :)

    mssql için yazıyorum,

    select p.*,c.* from post_category_relations PCR

    INNER JOIN posts p in p.postsId = PCR.postsId

    Inner JOIN category c in c.categoryId = PCR.categoryID

    WHERE PCR.categoryID  = 2

     

    kolay gelsin

    inner join'deki in leri on'a çevirirsen mysql'de de çalışması gerekiyor.

    çevirdim hocam:

    SELECT posts. * , categories. * 
    FROM post_category_relations
    INNER JOIN posts ON posts.post_id = post_category_relations.post_id
    INNER JOIN categories
    IN categories.cat_id = post_category_relations.category_id
    WHERE post_category_relations.category_id =2
    LIMIT 0 , 30

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Austen
    Austen's avatar
    Kayıt Tarihi: 13/Ağustos/2012
    Erkek

    INNER JOIN categories
    IN categories.cat_id = post_category_relations.category_id

    burdakini unutmuşsun. column adlarında sıkıntı yoksa çalışması gerekiyor.

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SSPPSS
    SSPPSS's avatar
    Kayıt Tarihi: 26/Ağustos/2007
    Erkek
    Slothere bunu yazdı

    INNER JOIN categories
    IN categories.cat_id = post_category_relations.category_id

    burdakini unutmuşsun. column adlarında sıkıntı yoksa çalışması gerekiyor.

    @slothere @sharpshooter süpersiniz hocalar, ben olaya yanlış yaklaşıyomuşum sanırım.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    sniperscope
    sniperscope's avatar
    Banlanmış Üye
    Kayıt Tarihi: 14/Mart/2009
    Erkek

    Once Posts tablosunun icinde categori_id diye bir sutun olusturup, postlarin categori id lerini burada tut.

    post_category_relations diye bir tabloya hic ihtiyacin yok.

     

    Asagidaki sorgu isini gorur.

     

    SELECT c.cat_name, p.title, p.content, p.date, p.active
    FROM categories c
    LEFT JOIN posts p
    ON c.cat_id = p.categori_id
    WHERE c.cat_id = '2'

     Edit: Sorgularinda sutun sayisi ne kadar olursa olsun * kullanman pek iyi degil.

    sniperscope tarafından 26/Eki/12 10:34 tarihinde düzenlenmiştir

    "Yer yuzunde hic bir pislik yoktur ki; altindan bir yahudi cikmasin" Adolf Hitler... "Turkiye de hicbir pislik yokturki altindan cemaat cikmasin" SniperScope "Nerede yavşak, hırsız varsa hepsi Allahçı" Fazil Say
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SSPPSS
    SSPPSS's avatar
    Kayıt Tarihi: 26/Ağustos/2007
    Erkek
    sniperscope bunu yazdı

    Once Posts tablosunun icinde categori_id diye bir sutun olusturup, postlarin categori id lerini burada tut.

    post_category_relations diye bir tabloya hic ihtiyacin yok.

     

    Asagidaki sorgu isini gorur.

     

    SELECT c.cat_name, p.title, p.content, p.date, p.active
    FROM categories c
    LEFT JOIN posts p
    ON c.cat_id = p.categori_id
    WHERE c.cat_id = '2'

     Edit: Sorgularinda sutun sayisi ne kadar olursa olsun * kullanman pek iyi degil.

    hocam bir post birden fazla kategorideyse ne yapıcaz ?

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    sniperscope
    sniperscope's avatar
    Banlanmış Üye
    Kayıt Tarihi: 14/Mart/2009
    Erkek

    O nasil olacak anlamadim. Bir post sadece bir kategoriye ait olur, ve onun alt kategorisi olur.

    Simdi, karsinda bir araba var, bu araba hem arac kategorisinde, hemi gemi, hemde ucak kateogirisinde.

    sniperscope tarafından 26/Eki/12 11:15 tarihinde düzenlenmiştir

    "Yer yuzunde hic bir pislik yoktur ki; altindan bir yahudi cikmasin" Adolf Hitler... "Turkiye de hicbir pislik yokturki altindan cemaat cikmasin" SniperScope "Nerede yavşak, hırsız varsa hepsi Allahçı" Fazil Say
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SSPPSS
    SSPPSS's avatar
    Kayıt Tarihi: 26/Ağustos/2007
    Erkek
    sniperscope bunu yazdı

    O nasil olacak anlamadim. Bir post sadece bir kategoriye ait olur, ve onun alt kategorisi olur.

    Simdi, karsinda bir araba var, bu araba hem arac kategorisinde, hemi gemi, hemde ucak kateogirisinde.

    php - mysql ile ilgili bi makale yazdığımı düşün hocam, bu makale hem php hemde mysql kategorisinde çıkmalı mesela.zaten bunu kullanıcağım yapı bambaşka, soru rahat anlaşılsın diye bu şekilde post-kategori olayıyla sordum

Toplam Hit: 1844 Toplam Mesaj: 18