2012-10-02 105 views
0

我做了一個表上的社交網絡網站的所有評論:發表評論Wallposts和評論

另外,我一個表,分配給一個評論所有評論:comment_assign

所以,我建一個函數comment()以便在每個節類型(圖像,用戶頁面,組等)中輕鬆實現。在$ _GET ['s'] ==用戶的情況下,我想要在這些wallposts上添加wallposts以及評論。全部存儲在'評論'中。

我有了這個計劃,以顯示此: 1. SQL查詢來獲取評論 2. HTML輸出 3.這個HTML輸出內的另一個SQL查詢來獲得這個評論的規定分配的註釋(wallpost情況)

現在的問題是,我的第一個查詢顯示所有評論。另外,評論應該是子註釋。所以我的問題是,如果有任何方法可以在第一個查詢中指定,那麼當我收到我的所有評論時,請說:如果此comment_id可用,請在comment_assign中查找。如果是這樣,不要顯示這個評論,因爲它是一個子評論(我會在提到的步驟3中顯示)。

也許這整個結構可能會改變?我將不勝感激任何建議。即使很難實現,但最有效。


表結構:

評論

ID,UID,NID,網站,文本,日期

comment_assign

COMMENT_ID,assign_id


首先SQL查詢例子,它不工作,以避免顯示所有評論(也被分配的)。看到最後一行:

SELECT *  
FROM `comments` AS c 
LEFT JOIN `comment_assign` AS ca ON ca.`comment_id` = c.`id` 
LEFT JOIN `users` AS u ON c.`uid` = u.`id` 

WHERE c.`nid`='".$nid."' 
AND c.`site`='".$_GET['s']."' 
AND ca.`comment_id` != c.`id` 
+0

分享您的查詢 – m1k3y3

+0

如果我編輯我的最後一行:「AND ca.'comment_id' IS NULL」它的作品。但是,這兩個查詢的結構仍然不是很高效,我想呢?關於快速輸出所有數據和編程效率?我應該以某種方式更改我的table_structure或將這兩個查詢合併爲一個? – Vay

回答

1

如果我理解正確的話,您可以選擇從評論表中的所有評論。然後,您需要檢查comment_assign.comment_id中是否存在comment.id。如果它存在,它是一個分評論。那是對的嗎?

你可以做到兩種方式 - 清潔的方法是另一個字段添加到評論表,並把assign_id那裏,因爲每個註釋只能用另一個評論相關聯,或者是頂級的評論(* assign_id是NULL *)。

或者,你可以LEFT JOIN兩個表。 assign_id爲NULL的每一行都是牆壁註釋,其每一行都有一個值意味着它被分配爲一個子註釋。即

SELECT id, uid, site, text, date 
FROM comment 
LEFT JOIN comment_assign ON (comment.id = comment_assign.comment_id) 
WHERE comment_assign.assign_id IS NULL; 
+0

你好。感謝您的發佈。我剛纔用同樣的解決方案評論了我的問題。我讀過,如果沒有那麼多表格行不會填充數據的情況,您應該製作另一個表格。這就是爲什麼我沒有向table'comment'添加名爲assign_id的錶行。所以,現在我很困惑,因爲你說這將是一個乾淨的方式。你懂我的意思嗎?另外,就像我在我的問題頂部的評論:你認爲我應該以某種方式改變我的表結構或將這兩個查詢綁定到一個? – Vay

+0

因爲以後我會用另一個while循環和SQL-Query來顯示這些子註釋,也用SQL連接。 – Vay

+0

對我來說,將該字段添加到原始表格是有意義的。最有可能的是,你最終會有比評論更多的評論,所以它不會是空的。但是你會保存一個查詢。 如果要保存查詢數據庫並在代碼中處理更多內容,可以選擇所有註釋,按* assign_id *對其排序,然後按順序解析數組。即遍歷結果,輸出原始註釋,然後當assign_id爲NOT NULL時,將記錄輸出爲子註釋。 –