我正在尝试设置一个查询,以输出过去 4 小时内阅读次数最多的 5 篇文章。但是,如果过去 4 小时内没有新文章,列表将为空。我想要的是在过去 4 小时内输出 5 篇文章的查询。如果最近 4 小时内没有 5 篇文章,但假设只有 2 篇,我想再添加 3 篇最新文章到列表中(按 log_time 排序)。 所以查询应该总是输出 5 篇文章。 我想知道这是否可以在一个查询中完成。
$sqlCommand = "SELECT * FROM feeds where category like '$category' AND log_time > NOW() - INTERVAL 4 HOUR ORDER BY feed_hits DESC LIMIT 5";
$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
While ($row = mysqli_fetch_array($query)) {
$fid1 = $row["id"];
$feed_id1 = $row["feed_id"];
$link1 = $row["link"];
$title1 = $row["title"];
$output .= '<a href="detail/' . $fid1 . '" title="' . $title1 . '">' . $title1 . '</a><br/>';
}
mysqli_free_result($query);
echo $output;
最佳答案
您可以通过 UNION
查询来实现这一点。以下查询的前半部分只是您的原始查询,最多可能返回 5 条匹配记录。查询的后半部分返回任意数量的超过 4 小时的记录。然后整个查询按日志时间排序,限制为 5。这会将您最近的目标记录放在第一位,较旧的记录在需要时占据任何可用位置。
SELECT *
FROM
(SELECT * FROM feeds
WHERE category like '$category' AND log_time > NOW() - INTERVAL 4 HOUR
ORDER BY feed_hits DESC LIMIT 5) t1
UNION ALL
(SELECT * FROM feeds
WHERE category like '$category' AND log_time <= NOW() - INTERVAL 4 HOUR) t2
ORDER BY log_time DESC
LIMIT 5;
关于php - 具有多个约束的Mysql构建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606151/