• 04-11-2010, 13:12:08
    #19
    Üyeliği durduruldu
    NiZZo_ adlı üyeden alıntı: mesajı görüntüle
    Şu şekilde dene bakalım.
    SELECT content.*,polls.* FROM (SELECT c.id as 'contentID', c.title as 'contentTitle',c.username FROM forum_content as c WHERE c.username='{$user->username}') as content INNER JOIN (SELECT p.id as 'pollsID',p.title as 'pollsTitle',p.username FROM forum_polls as p WHERE p.username='{$user->username}') as polls ON content.username=polls.username
    ---
    Yada şunu
    SELECT c.*,(SELECT p.id as 'pollsID',p.title as 'pollsTitle',p.username FROM forum_polls as p WHERE p.username='{$user->username}') as polls FROM forum_content WHERE c.username='{$user->username}')

    Bu kullanıcın forum_content alanında 4, forum_polls alanında ise 1 tane içeriği var. İlk sorgu şöyle:

    ezSQL (v2.03) Variable Dump..
    
    Array
    (
        [0] => Array
            (
                [contentID] => 7
                [contentTitle] => Tanışalım
                [username] => Administrator
                [pollsID] => 1
                [pollsTitle] => Yeni Sitemiz
            )
    
        [1] => Array
            (
                [contentID] => 169
                [contentTitle] => Video istek
                [username] => Administrator
                [pollsID] => 1
                [pollsTitle] => Yeni Sitemiz
            )
    
        [2] => Array
            (
                [contentID] => 170
                [contentTitle] => Program İstek
                [username] => Administrator
                [pollsID] => 1
                [pollsTitle] => Yeni Sitemiz
            )
    
        [3] => Array
            (
                [contentID] => 171
                [contentTitle] => Oyun İstek
                [username] => Administrator
                [pollsID] => 1
                [pollsTitle] => Yeni Sitemiz
            )
    
    )
    
    
    Type: Array
    Last Query [17]: SELECT content.*,polls.* FROM (SELECT c.id as 'contentID', c.title as 'contentTitle',c.username FROM forum_content as c WHERE c.username='Administrator') as content INNER JOIN (SELECT p.id as 'pollsID',p.title as 'pollsTitle',p.username FROM forum_polls as p WHERE p.username='Administrator') as polls ON content.username=polls.username
    Last Function Call: $db->query("SELECT content.*,polls.* FROM (SELECT c.id as 'contentID', c.title as 'contentTitle',c.username FROM forum_content as c WHERE c.username='Administrator') as content INNER JOIN (SELECT p.id as 'pollsID',p.title as 'pollsTitle',p.username FROM forum_polls as p WHERE p.username='Administrator') as polls ON content.username=polls.username")
    Last Rows Returned: 4
    İkinci sorgu ise hata veriyor:


    Bütün c yerine forum_content yazdığımda ise:

    Unknown table 'c'
    Operand should contain 1 column(s)
  • 04-11-2010, 13:25:58
    #20
    Eposta Aktivasyonu Gerekmekte
    İki tablodada eşit miktarda olmadığı için ve username'de eşit olduğu için her sorgu aynı id'nin bilgilerini alıyor.

    Birde şunu dene
    SELECT content.*,polls.* FROM (SELECT c.id as 'contentID', c.title as 'contentTitle',c.username FROM forum_content as c WHERE c.username='{$user->username}') as content INNER JOIN (SELECT p.id as 'pollsID',p.title as 'pollsTitle',p.username FROM forum_polls as p WHERE p.username='{$user->username}' GROUP BY p.id) as polls ON content.username=polls.username
    Olmazsa stored procedure ile yapmaya çalış. İf kontrolü kullanarak istediğini alırsın.
  • 04-11-2010, 17:33:48
    #21
    Üyeliği durduruldu
    NiZZo_ adlı üyeden alıntı: mesajı görüntüle
    İki tablodada eşit miktarda olmadığı için ve username'de eşit olduğu için her sorgu aynı id'nin bilgilerini alıyor.

    Birde şunu dene
    SELECT content.*,polls.* FROM (SELECT c.id as 'contentID', c.title as 'contentTitle',c.username FROM forum_content as c WHERE c.username='{$user->username}') as content INNER JOIN (SELECT p.id as 'pollsID',p.title as 'pollsTitle',p.username FROM forum_polls as p WHERE p.username='{$user->username}' GROUP BY p.id) as polls ON content.username=polls.username
    Olmazsa stored procedure ile yapmaya çalış. İf kontrolü kullanarak istediğini alırsın.
    Bu da olmadı. O vakit "stored procedure" konusunu araştırayım.
  • 05-11-2010, 08:53:16
    #22
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Tablo dizaynını buraya detaylı bir şekilde yazmadığın sürece istediğin sonuç alamazsın.
  • 05-11-2010, 09:13:15
    #23
    Üyeliği durduruldu
    S4l1h adlı üyeden alıntı: mesajı görüntüle
    Tablo dizaynını buraya detaylı bir şekilde yazmadığın sürece istediğin sonuçu alamazsın.
    forum_content:



    forum_polls:

  • 05-11-2010, 10:42:47
    #24
    Bu iki tabloda İlişkili colomlar hangileri?
    Eğer bir biriyle ilişkileri yoksa Birleştiremezsin.

    Kategoriler
    id,ad
    Haberler
    id,ad,kat_id

    Misal burada kategoriler tablosundaki id ile haberler tablosundaki kat_id birbiriyle ilişkilidir.


    LEFT JOIN // Soldaki Tablodaki verilerin hepsini alır ve sağdaki tablodan ise sadece uyanları alır.
    RIGHT JOIN // Sağdaki Tablodaki verilerin hepsini alır ve soldaki tablodan ise sadece uyanları alır.
    INNER JOIN // Sadece Uyanları Getirir.

    SELECT forum_content.id,forum_content.title,forum_polls.id,forum_polls.title
    FROM forum_content LEFT JOIN forum_polls
            ON forum_content.username=forum_polls.username /* Burada İlişkili Olduğu Colomlar Yazılır*/
    WHERE forum_content.username='MEHMET'
    Örnek Olarak üstteki sorgu forum_content Tablosundaki tüm bilgileri getirir ve forum_polls tablosundan ise sadece uyanları getirir ve ilişkileri username colomudur.
  • 05-11-2010, 10:55:27
    #25
    Üyeliği durduruldu
    S4l1h adlı üyeden alıntı: mesajı görüntüle
    Bu iki tabloda İlişkili colomlar hangileri?
    Eğer bir biriyle ilişkileri yoksa Birleştiremezsin.

    Kategoriler
    id,ad
    Haberler
    id,ad,kat_id

    Misal burada kategoriler tablosundaki id ile haberler tablosundaki kat_id birbiriyle ilişkilidir.


    LEFT JOIN // Soldaki Tablodaki verilerin hepsini alır ve sağdaki tablodan ise sadece uyanları alır.
    RIGHT JOIN // Sağdaki Tablodaki verilerin hepsini alır ve soldaki tablodan ise sadece uyanları alır.
    INNER JOIN // Sadece Uyanları Getirir.

    SELECT forum_content.id,forum_content.title,forum_polls.id,forum_polls.title
    FROM forum_content LEFT JOIN forum_polls
            ON forum_content.username=forum_polls.username /* Burada İlişkili Olduğu Colomlar Yazılır*/
    WHERE forum_content.username='MEHMET'
    Örnek Olarak üstteki sorgu forum_content Tablosundaki tüm bilgileri getirir ve forum_polls tablosundan ise sadece uyanları getirir ve ilişkileri username colomudur.

    Ben sadece ahmet kullanıcısının forum_content ve forum_polls tablolarındaki içeriklerini tek sorguda listeletmek istiyorum. Bu örnek sorgu sadece forum_polls alanındaki içerikleri listeliyor.
  • 05-11-2010, 10:58:05
    #26
    Eğer tablolar arasında ilişki yoksa tabloları birleştiremezsin.
  • 05-11-2010, 10:58:51
    #27
    Üyeliği durduruldu
    S4l1h adlı üyeden alıntı: mesajı görüntüle
    Eğer tablolar arasında ilişki yoksa tabloları birleştiremezsin.
    İki tabloda da username alanı var. Bu ilişki olmuyor mu?