[英]problem constructing a mysql query(most recent per item)
我有一个网站,用户可以在其中评论照片。 我有一个这种格式的评论表:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(12) | NO | | NULL | |
| id | varchar(32) | NO | MUL | NULL | |
| whenadd | int(20) | NO | | NULL | |
| text | text | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
以及一张这样格式的照片表:(澄清一下,ID是指照片表中的ID,这是缩写)
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| id | varchar(32) | NO | PRI | NULL | |
| type | varchar(5) | NO | | NULL | |
+----------+------------------+------+-----+---------+-------+
所以基本上,我试图返回已被评论的照片,在他们被评论的日期,按每张照片的最新评论排序。 我曾尝试使用 INNER JOIN 来做到这一点,但它似乎永远无法正常工作。 有任何想法吗?
最好将 lastCommentDate 列添加到照片表中,并在每次有人发表评论时填充它。
它将执行得更快,而不是每次都加载此类查询。
SELECT * FROM comments LEFT JOIN photos ON comments.ID=photos.ID WHERE comments.ID=PHOTOID ORDER BY whenadd DESC
将 PHOTOID 更改为您的照片 ID
select p.id, p.type, max(c.whenadd) from photos p, comments c where p.id = c.photo_id group by photo.id order by c.whenadd desc
- this will return only commented photos. 使用左连接返回所有照片。 但是这两个表之间似乎没有外键。 表格评论应该有一个列 photo_id (或类似的东西)来引用photo
表中的相应照片。
这个问题对我来说有点不清楚-在评论日期已评论的照片-这似乎是每张照片。 随时澄清这一点。
如果您想要按最新评论排序的照片,我会这样做:
SELECT
photo.id,
MAX(c.whenadd) as last -- and maybe other fileds as well --
FROM
photos photo LEFT JOIN comments c ON c.id=photo.id
GROUP BY
photo.id
ORDER BY last DESC
请注意,没有评论的照片存在问题 - 它们将排在最后(我认为),因为 MAX(空集)是 NULL。
如果您想要在某个特殊日期发表评论的照片,按他们的最后评论排序,您只需添加另一个联接:
SELECT
photo.id,
MAX(c.whenadd) as last -- and maybe other fileds as well --
FROM
photos photo NATURAL JOIN comments c NATURAL JOIN comments c2
WHERE
c2.whenadd = yourspecialdate
GROUP BY
photo.id
ORDER BY last DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.