Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php While循环中的记录排序_Php_Mysql - Fatal编程技术网

Php While循环中的记录排序

Php While循环中的记录排序,php,mysql,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_arra

这就是问题所在,我不知道如何解决。假设我有这样的问题:

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 tblNews 
JOIN tblMain 
    ON (tblNews.news_key = tblMain.news_key) 
WHERE news_key > 100 
ORDER BY popularity DESC
现在让我们假设我想按流行程度对文章进行排序,这样我就可以将我的第二个查询更改为如下内容

         SELECT articles, popularity from tblMain WHERE 
         news_key=$key ORDER BY popularity DESC;
但现在这行不通了,因为它只是在第一个循环找到记录时抓取记录。另外,我在这里做了一个非常简单的说明,我知道在第一个查询中连接表可以做到这一点,但是在我的实际示例中的第一个查询有很多计数和分组,所以我担心这不是一个选项。我还应该提到我涉及分页,所以每次选择页面时都会重新查询第一个查询


有什么建议吗?

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

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 tblNews 
JOIN tblMain 
    ON (tblNews.news_key = tblMain.news_key) 
WHERE news_key > 100 
ORDER BY popularity DESC

通过这种方式,您应该能够获得正确的结果。

假设您不想执行联接(无论出于何种原因,如果您担心锁定表或编写过于复杂的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']);
}

谢谢你的建议!事实上,我已经接受了你的建议,返回并加入了第一个查询…这很复杂,但我想我已经做到了

非常感谢