1

这是问题所在,我不知道如何解决它..假设我有这样的事情:

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;

但是现在这行不通了..因为它只是在第一个循环找到记录时抓取记录。另外,我在这里做了一个非常简单的说明,我知道在第一个查询中加入表会做到这一点,但我现实生活示例中的第一个查询有很多计数和分组,所以我担心这不是一个选项. 我还应该提到我涉及分页,因此每次选择页面时都会重新查询第一个查询......

有什么建议吗?

4

3 回答 3

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']);
}
于 2012-12-06T20:05:03.340 回答
1

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

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

这样你应该能够得到正确的结果。

于 2012-12-06T20:04:44.183 回答
0

感谢您的建议!实际上,我最终接受了您的建议并返回并在第一个查询中加入...这很复杂,但我想我知道了。

非常感谢!

于 2012-12-06T20:34:36.527 回答