繁体   English   中英

构造 mysql 查询的问题(每项最新)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM