2011-03-29 19 views
1

我建立一個社交網站的客戶端和的東西,一直困擾我的一個是我會如何顯示狀態更新,新的博客文章,輪廓加權重要性顯示出來評論等在他們的「牆上」。問題不在於查詢數據庫並顯示信息......它在1個查詢中顯示所有信息。例如,可以說我有如下表:運行多個查詢,然後根據像Facebook牆

Members, 
MemberComment, 
Statuses, 
Articles 

我知道我可以在一個這樣的查詢顯示成員的狀態:

SELECT * FROM status WHERE who = '$profileid' ORDER BY ID DESC 

,然後我可以顯示這樣的評論:

SELECT * FROM member_comments WHERE which = '$profileid' ORDER BY ID DESC 

我使用while循環來顯示數據的每個部分,一個while循環的意見,一個是狀態,等等。

如何顯示在它按日期排序發佈,或重要性級別的方式這些信息?我不知道如何將所有查詢凝結成一個,然後在此基礎之上,能夠顯示它在一個while循環的正確途徑。會員身份

select member.*, status.* from member m 
    inner join status s on m.member_id = s.who 
order by s.ID desc limit 1 
+1

我敢說你將不得不加入一些表。 – Smandoli 2011-03-29 20:47:07

回答

0

這是我結束了去,現在它工作正常。它同時返回的意見和狀態,並發表日期命令他們...

SELECT 
    member_comments.what AS commentWHAT, 
    member_comments.who AS commentWHO, 
    member_comments.when AS commentWHEN, 
    members.name AS commentNAME 
    FROM member_comments, members 
    WHERE member_comments.who = members.id AND 
    member_comments.which = '$id' 
    UNION 
    SELECT 
    status.what AS statusWHAT, 
    status.who AS statusWHO, 
    status.when AS statusWHEN, 
    members.name AS statusNAME 
    FROM status, members 
    WHERE status.who = '$id' AND members.id = '$id' 
    ORDER BY commentWHEN DESC 

然後我回聲出的數據如下:

  while ($row = mysql_fetch_array($result)) { 
      $message = $row['commentWHAT']; 
      $commentWHO = $row['commentWHO']; 
      $commentNAME = $row['commentNAME']; 
      $statusWHO = $row['statusWHO']; 

      echo ' 
      <div class="fairway_thing"> 
       <img src="images/avatar-60.jpg"> 
       <p><strong><a href=profile.php?uid=' . $commentWHO . '>' . $commentNAME .'</a></strong> ' . $message . '</p> 
       <p><a href="#">Like</a> <a href="#">Tweet</a> <a href="#">Share</a></p> 
      </div> 
      <div class="clear"></div> 
      '; 
0

一個例子。然後,您可以解析服務器端的該字段以單獨顯示每個結果。

請參見:http://dev.mysql.com/doc/refman/4.1/en/group-by-functions.html#function_group-concat

+0

使用連接..我將如何顯示數據?使用mysql_fetch_array和一個while循環?或者有些不同? – zachwills 2011-03-29 21:16:04

+0

你仍然會像往常一樣回來。在這種情況下,由於「限制1」,你只會得到一個結果。如有疑問,請手動運行查詢並查看所得結果。 – sreimer 2011-03-29 21:34:27

0

如果你正在使用MySQL,我會使用GROUP_CONCAT功能,讓所有的孩子們,並把它們放到一個行父在新列

0

假設你有某種不同的表之間的相似性,以及某種想法如何處理與相關性,你可以使用UNION運算符。這就像魔術一樣!

樣品查詢:

select title, 
    date, 
    100 as importance 
from memberComment 
where originalPostMemberID = $currentUserID 
union 
select title, 
    date, 
    1000 as importance 
from statuses 
where (some way of working out visibility of the status request) 
union 
select title, 
    date, 
    1010 as importance 
from articles 
where (some way of working out visibility of the status request) 
order by date desc, importance 
+0

所以你可以通過多個參數來訂購? IE數據和重要性? – zachwills 2011-03-29 21:36:05

+0

是的,你可以。如果您的所有查詢都返回相同的列,則僅適用於聯合,所以這是一個限制 - 但如果您可以使用聯合,則可以按多個列進行排序。 – 2011-03-30 05:42:36

+0

什麼是工會的替代解決方案?我一直在expirementing它,我覺得我還可以首先遇到麻煩的道路,因爲我需要相同的列... – zachwills 2011-03-30 20:38:36