我有一个带有书签的表,lz_link
和一个存储每次点击的名为 lz_hits
的链接的表。然后我想显示所有书签,按上周收到的点击次数排序。
这是我到目前为止的查询:
SELECT count(hit_time) as cnt, descr, l_id, url
FROM lz_link
LEFT JOIN lz_hits ON hit_lz=l_id
WHERE link_aktiv=1
&& hit_time >= '.(time()-Options::$most_hits_hit_days*3600*24).'
GROUP BY hit_lz
ORDER BY cnt DESC
LIMIT '.Options::$boxes_count.';
它有效,但我只得到一个在给定时间段内访问次数为零的书签。任何其他未访问过的书签根本不会显示。
为什么会发生这种情况?
如何获取所有书签,即使它们在给定时间段内没有被访问过?
最佳答案
将适用于 lz_hits 的任何条件从 WHERE 子句移至 ON 子句。 抱歉,我无法发布查询 - 我使用的是移动设备。
编辑:也许这可以帮助?
SELECT count(hit_time) as cnt, descr, l_id, url
FROM lz_link
LEFT JOIN lz_hits ON hit_lz=l_id
AND hit_time >= '.(time()-Options::$most_hits_hit_days*3600*24).'
WHERE link_aktiv=1
GROUP BY hit_lz
ORDER BY cnt DESC
LIMIT '.Options::$boxes_count.';
假设 link_active 和 hit_lz 来自表 lz_link。如果 link_active 不是,只需将其移至 ON 子句,就像我对 hit_time 所做的那样。 至于 hit_lz - 按左连接的列进行分组没有多大意义。考虑使用另一列进行分组。
关于php - 选择表 A 中的所有元素,按表 B 中链接到每个项目的条目数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783033/