这是问题所在,我不知道如何处理它..我说我有这样的事情:
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;
但现在这不会起作用。因为它只是在第一个循环找到它们时抓取记录。另外,我在这里做了一个非常简单的插图,我知道在第一个查询上连接表会做到这一点,但我现实生活中的第一个查询有很多计数和分组,所以我担心这不是一个选项。我还应该提到我有分页,所以每次选择页面时都会重新查询第一个查询......
有什么建议吗?
答案 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)
感谢您的建议!我实际上已经接受了你的建议并回去并在第一个查询中加入...这很复杂,但我想我已经拥有它。
非常感谢!