PHP-具有多个约束的MySQL构建查询

我正在尝试建立一个查询,以输出最近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构建查询 - 代码日志