我有一个网站,用户可以对照片发表评论。我有一个这种格式的评论表:
+----------+-------------+------+-----+---------+-------+
| 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来做到这一点,但它似乎永远不会正常工作。有什么想法吗?
答案 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