我有一个这样的查询(Mysql 5.X,PHP - 格式化以便于阅读)
$query ="
SELECT
p.p_pid,
p.p_name,
p.p_url
FROM
activity a,
products p
WHERE
a.a_uid= ".$uid_int."
AND a.a_pid > 0
AND p.p_pid = a.a_pid
GROUP BY
a.a_pid
ORDER BY
a.a_time DESC LIMIT 6
");
一般来说,它应该生成用户见过的 6 种最新产品的唯一列表。
问题在于,如果用户多次看到某个产品。其中一项在最近 6 项活动中,其中一项在最新 6 项活动之前,查询不会返回产品。我假设 (group by) 不会留下 a_time 与产品出现的最新时间。我怎样才能纠正它?
您是否尝试过按 MAX(a.a_time) 订购?
SELECT
p.p_pid,
p.p_name,
p.p_url
FROM products p
INNER JOIN activity a on p.p_pid = a.a_pid
WHERE
a.a_uid= ".$uid_int."
GROUP BY
p_pid, p_name, p_url
ORDER BY
max(a.a_time) DESC
LIMIT 6
作为最佳实践,请在不使用聚合的情况下对每个列使用 GROUP BY。 MySQL 是少数允许您使用未分组的列的数据库之一。它会从您选择的行中为您提供一个随机列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)