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

时间:2009-03-08 16:46:57

标签: sql mysql

我有一个网站,用户可以对照片发表评论。我有一个这种格式的评论表:

+----------+-------------+------+-----+---------+-------+
| 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来做到这一点,但它似乎永远不会正常工作。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

最好将lastCommentDate列添加到照片表中,并在每次有人发表评论时填充它。

每次执行速度更快,而不是加载此类查询。

答案 1 :(得分:0)

  

SELECT * FROM comments LEFT JOIN photos on comments.ID = photos.ID WHERE comments.ID = PHOTOID ORDER BY whenadd DESC

将PHOTOID更改为您的带照片的身份证件

答案 2 :(得分:0)

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 - 这只会返回评论的照片。使用左连接返回所有照片。但似乎这两个表之间没有外键。表格评论应该有一列photo_id(或类似的内容)来引用photo表格中的相应照片。

答案 3 :(得分:0)

这个问题对我来说有点不清楚 - 在评论日期评论过的照片 - 这似乎就像每张照片一样。随意澄清一下。

如果你想要照片按最新的照片排序,我会这样做:

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