2010-06-19 19 views
0

我有一個頁面,拉用戶帖子,用戶名,xbc/xlk標籤等,這是完美的......但因爲我從MyBB公告板系統提取信息,它完全不同。在回覆時,人們可以通過簡化回覆並更改它來更改「線索主題」。如何使用mysql和php連接3個表?

我不希望它顯示更改的主題標題,只是該主題中所有帖子的原始標題。

默認情況下,它會使用「RE:主題標題」進行回覆。他們可以很容易地編輯它,它會出現在「主題」單元&人們不知道它被張貼在哪個線程,因爲他們改變了他們的線程,當回覆帖子。

所以我只想在回覆時保留原始主題標題。

有道理〜?

表:mybb_users 字段:UID,用戶名

表:mybb_userfields 字段:UFID

表:mybb_posts 字段:PID,TID的replyTo,主題,UFID,用戶名,UID,消息

表:mybb_threads 字段:TID,FID,主題,UID,用戶名,lastpost,lastposter,lastposteruid

我haev試過多個曲eries沒有成功:

$result = mysql_query(" 
    SELECT * FROM mybb_users 
    LEFT JOIN (mybb_posts, mybb_userfields, mybb_threads) 
    ON (
     mybb_userfields.ufid=mybb_posts.uid 
     AND mybb_threads.tid=mybb_posts.tid 
     AND mybb_users.uid=mybb_userfields.ufid 
    ) 
    WHERE mybb_posts.fid=42"); 


$result = mysql_query(" 
    SELECT * FROM mybb_users 
    LEFT JOIN (mybb_posts, mybb_userfields, mybb_threads) 
    ON (
     mybb_userfields.ufid=mybb_posts.uid 
     AND mybb_threads.tid=mybb_posts.tid 
     AND mybb_users.uid=mybb_posts.uid 
    ) 
    WHERE mybb_threads.fid=42"); 

$result = mysql_query(" 
    SELECT * FROM mybb_posts 
    LEFT JOIN (mybb_userfields, mybb_threads) 
    ON (
     mybb_userfields.ufid=mybb_posts.uid 
     AND mybb_threads.tid=mybb_posts.tid 
    ) 
    WHERE mybb_posts.fid=42"); 

回答

2

您的語法不適合執行多個LEFT JOIN s。每個連接都需要自己的ON條款。

SELECT 
    * 
FROM 
    mybb_users 
    LEFT JOIN mybb_userfields ON mybb_users.uid = mybb_userfields.ufid 
    LEFT JOIN mybb_posts ON mybb_userfields.ufid = mybb_posts.uid 
    LEFT JOIN mybb_threads ON mybb_posts.tid = mybb_threads.tid 
WHERE 
    mybb_posts.fid = 42 

這個查詢應該給你想要的結果。但它可能不是獲取這些結果的最有效的查詢。檢查EXPLAIN的輸出作爲測試的一部分,以確保它沒有使用表掃描或類似的東西。

做所有這些連接都需要是LEFT JOIN s? LEFT JOIN強制MySQL以指定順序連接表,而不是允許查​​詢優化器確定加入它們的最佳順序。這就是爲什麼你可能需要小心查詢執行計劃。就查詢輸出而言,JOINLEFT JOIN之間的主要區別在於LEFT JOIN結果集將在連接左側的表中的每一行至少包含一行,而常規的JOIN將不包含行if在連接的右側沒有匹配。

編輯:此外,你說「我不想讓它顯示更改的主題標題,只是該主題中所有帖子的原始標題。」這表明您只需要這些表中的列的子集,在這種情況下SELECT *是不合適的。

+0

感謝您解釋JOINS之間的差異。我想我會從現在開始使用JOIN。 這差不多〜!一切都是正確的,只是用戶名不符合帖子。其他一切都是正確的。 您可以看到xbc,xlk和其他colums與主題&post文章匹配。用戶名是唯一不匹配的用戶名。 HTTP://www.mujak。com/test/test4.php – steven 2010-06-19 23:29:50