在While循环中排序记录

时间:2012-12-06 19:59:01

标签: php mysql

这是问题所在,我不知道如何处理它..我说我有这样的事情:

SELECT news_key FROM tblNews (WHERE news_key>100);
  while ($row = mysql_fetch_array($rid)) {
  $key=$row['news_key'];

         SELECT articles from tblMain WHERE news_key=$key;
         while ($row2 = mysql_fetch_array($rid2)) {
         echo ($row['articles']);
         }
  }

现在让我说我想按人气排序文章,。所以我可以将我的第二个查询改为这样的......

         SELECT articles, popularity from tblMain WHERE 
         news_key=$key ORDER BY popularity DESC;

但现在这不会起作用。因为它只是在第一个循环找到它们时抓取记录。另外,我在这里做了一个非常简单的插图,我知道在第一个查询上连接表会做到这一点,但我现实生活中的第一个查询有很多计数和分组,所以我担心这不是一个选项。我还应该提到我有分页,所以每次选择页面时都会重新查询第一个查询......

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

假设您不想进行连接(无论出于何种原因,如果您担心锁定表或编写过于复杂的SQL),您可以将第一个查询中的键加载到数组中,对数组进行排序,然后遍历数组以运行第二个查询:

// SELECT news_key FROM tblNews (WHERE news_key>100);
// Execute query.
$keysArray = array();
while ($row = mysql_fetch_array($rid)) {
    $keysArray[] =$row['news_key'];
}
arsort($keysArray);
foreach ($keysArray as $key) {
    // SELECT articles from tblMain WHERE news_key=$key;
    // Execute query.
    while ($row2 = mysql_fetch_array($rid2)) {
    echo ($row['articles']);
}

答案 1 :(得分:1)

在这种情况下,您必须使用JOIN将两个表连接在一起并对结果进行排序。您的查询应如下所示:

SELECT articles, popularity 
FROM tblNews 
JOIN tblMain 
    ON (tblNews.news_key = tblMain.news_key) 
WHERE news_key > 100 
ORDER BY popularity DESC

这样你就可以得到正确的结果。

答案 2 :(得分:0)

感谢您的建议!我实际上已经接受了你的建议并回去并在第一个查询中加入...这很复杂,但我想我已经拥有它。

非常感谢!