mysql
  • sql
  • join
  • 2013-01-16 17 views 1 likes 
    1

    如何獲取特定記錄並僅滿足條件?從story中選擇項目,其中story.uid等於uid或story.uid等於friend.uid或friend.fid並且被接受

    我的代碼爲

    "SELECT a.id, a.text, a.uid, a.time 
    FROM story a INNER JOIN friends b 
         ON ((a.uid = '" . $uid . "') OR 
          (b.uid = '" . $uid . "' AND accepted='1') OR 
          (b.fid = '" . $uid . "' AND accepted='1')) 
    ORDER BY a.time DESC 
    LIMIT 3"; 
    

    它正常工作,只是當friends表是空的,它不會顯示story記錄。

    我想達到什麼是

    • 如果在表UID故事等於登錄UID(用戶),然後從表顯示文本故事(意思是他自己的故事)

    • 如果UID故事等於UID朋友和友誼是接受如果在表UID故事等於FID朋友和它的友誼是接受然後顯示文本在表故事(意思是fr的故事OM A的朋友和其顯示只有友誼被接受)

    • 如果沒有友誼可言,只顯示從表故事自己的故事而忽略其他

    +1

    我不知道你想要完成什麼,但是如果你的問題是關於內部連接的工作方式,那麼當你仍然想要返回一行時,可以使用外部連接加入可能沒有排。 – gview

    +0

    謝謝,它的工作 – GucabanSimon

    回答

    1

    我想您沒有使用正確的連接格式。它應該是:

    SELECT field_name 
        FROM table1 t1 
        INNER JOIN table2 t2 
        ON t1.id = t2.some_id 
        WHERE.. 
    

    您可以查看基本信息here

    在你的情況如下,你應該寫查詢:

    "SELECT a.id, a.text, a.uid, a.time 
        FROM story a INNER JOIN friends b 
        ON a.id = b.some_id WHERE ((a.uid = '" . $uid . "') OR 
        (b.uid = '" . $uid . "' AND accepted='1') OR 
        (b.fid = '" . $uid . "' AND accepted='1')) 
        ORDER BY a.time DESC 
        LIMIT 3"; 
    

    我認爲這將有助於。

    +0

    想通了,刪除** a = b.some_id **,並使其**左連接**將做的伎倆。謝謝 – GucabanSimon

    +0

    歡迎您。 :) – Workonphp

    相關問題