2012-07-14 39 views
0

我正在構建一個從訂閱表中獲取用戶的函數。這些用戶然後用於獲取他們的個人文章,並以有序的方式顯示他們。從多個用戶獲取行並按日期排序顯示它們

我已經設法做到了一半。它將獲取用戶,然後輸出用戶文章。但是一次只需要一個用戶。我正在尋找一種方法來選擇我的訂閱表中的所有用戶並將它們全部提取出來,以便我可以同時顯示它們,但是按日期排序。

的表格:


**Subscribe :** 
Lastviewed (datetime) 
Uniqueuser (userid) 
Subscription (subscribed users id) 

**Article:** 
date_posted (datetime) 
uniqueuser (users id) 

這是我得到:

$sesname = $_SESSION['full_name']; 
$sesid = $_SESSION['user_id']; 

connectDB(); 
$sql ="select * from subscribe where uniqueuser = '$sesid'"; 
$rsd = mysql_query($sql); 

while ($row = mysql_fetch_array($rsd)) 
{ 
    $subscription = $row['subscription']; 
    $lastviewed = $row['lastviewed']; 
    $substart = $row['substart']; 
    $sql3 = "select * from article 
     where uniqueuser = '$subscription' 
     and date_posted > '$lastviewed' 
     order by date_posted 
     desc limit 0, 7"; 

    $rsd3 = mysql_query($sql3); 
    $newarticles = mysql_num_rows($rsd3); 

    while ($row3 = mysql_fetch_assoc($rsd3)) { 
     $id =$row3['id']; 
     $title = $row3['title']; 
     $uid = $row3['uniqueuser']; 
     $sql2 = "SELECT * FROM users WHERE id = '$uid'"; 
     $result2 = mysql_query($sql2); 

     while ($row2 = mysql_fetch_assoc($result2)) { 
      $name = $row2['user_name']; 
      echo "<b><a>{$name}</a></b> wrote an <a>article</a><br>"; 
     } 
    } 
} //END SUBSCRIBE 

此輸出:

User A wrote an article (1th july) 
User A wrote an article (2th july) 
User A wrote an article (3th july) 
User A wrote an article (4th july) 
User B wrote an article (1th july) 
User B wrote an article (2th july) 
User B wrote an article (3th july) 
User B wrote an article (4th july) 

即使用戶B的文章已經在用戶A的帖子之間發佈,它也會爲一個用戶接連排序。

通緝輸出:

User A wrote an article (1th july) 
User B wrote an article (1th july) 
User A wrote an article (2th july) 
User B wrote an article (2th july) 
User A wrote an article (3th july) 
User B wrote an article (3th july) 
User A wrote an article (4th july) 
User B wrote an article (4th july) 

讓我怎麼幫它,它有文化按日期排序,不管是什麼用戶寫的? 我想我的問題是因爲訂閱查詢的while循環,但我不知道任何其他方式來做到這一點。任何幫助是極大的讚賞! =)

+0

請將您的代碼格式 – helle 2012-07-14 11:43:57

+0

這樣更好嗎? :) – Havihavi 2012-07-14 12:09:19

回答

1

更多或更少的簡單地加入3個表和涉及排序a.date_posted

$sql2 = "select a.* , u.user_name, a.id as article_id, u.id as user_id 
    from subscribe s 
    join article a on s.subscription = a.uniqueuser AND s.lastviewed < a.date_posted 
    join user u on a.uniqueuser = u.id 
    where s.uniqueuser = '$sesid' 
    order by a.date_posted 
    desc limit 0, 7"; 

$result2 = mysql_query($sql2); 

while ($row2 = mysql_fetch_assoc($result2)) { 
    $name = $row2['user_name']; 
    $date = $row2['date_posted']; 
// fetch the columns having the same name using aliases 
$a_id = $row2['article_id']; 
$u_id = $row2['user_id']; 

    echo "<b><a>{$name}</a></b> wrote an <a>article</a>({$date})<br>"; 
} 

EDIT

修復條件s.lastviewed < a.date_posted

ADD約加入

加入兩個或多個表格是具有有效/真實條件(ON和WHERE)的表格的所有元素的所有組合的集合

+0

非常感謝您花時間!這似乎工作! =)這些連接查詢對我來說仍然是黑魔法,所以我不得不問:如果我需要從例如文章表中獲取行。我如何識字?文章有一行稱爲id,它存儲了文章ID。但行[id]返回用戶的ID而不是我想要的文章ID。任何想法? **使u.id作爲userid工作! =)** – Havihavi 2012-07-14 12:48:14

+0

使用別名,我會在我的答案中顯示 – 2012-07-15 00:54:46

相關問題