2012-07-14 53 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