从MySQL中仅选择最新创建的数据集记录中的所有字段?

时间:2015-02-25 21:21:01

标签: php mysql

我正在做一个评论表,我无法弄清楚这个查询。这些注释将在此应用程序的特定数据记录下,这是comment_number所指的。创建评论时,会为其分配记录'评论编号' ..评论编号+ date_added标识每个特定评论。如果更新/编辑注释,而不是更新记录本身,它将在表中创建具有相同comment_number和date_added的另一个条目,并创建一个新的date_modified。这是由于合规性问题。我必须能够回到那段特定评论的历史中。

以下是表格说明:

+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+--------------- +---------------+------+-----+---------+-------+
| comment_number | varchar(64)   | YES  |     | NULL    |       |
| comment        | varchar(2048) | YES  |     | NULL    |       |
| date_added     | datetime      | YES  |     | NULL    |       |
| date_modified  | datetime      | YES  |     | NULL    |       |
| is_deleted     | tinyint(1)    | YES  |     | NULL    |       |
| date_deleted   | datetime      | YES  |     | NULL    |       | 
+--------------- +---------------+------+-----+---------+-------+

因此,不同的评论将具有相同的评论编号,但会有不同的' date_added'领域。历史上特定评论的不同版本将具有相同的评论编号'和' date_added'价值,但不同的&date.dmodified'领域。

所以我需要提取所有评论的最新修改版本的所有字段。我一直在使用MAX()函数以及GROUP BYs,但我还没有得到正确的结果。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以在查询中使用ORDER BY date_modified,然后将LIMIT设置为1.确定是否需要ASC(从低到高)或DESC(从高到低)以获得所需的字段作为第一个结果。

答案 1 :(得分:1)

要为每条评论获取最新的date_modified,您需要这样的查询:

SELECT
  comment_number,
  date_added,
  MAX(date_edited) AS max_date_edited
FROM
  tablename
GROUP BY
  comment_number,
  date_added

要获取最新版本的评论,您需要加入此查询的结果:

SELECT c.*
FROM
  table_name c INNER JOIN (
    SELECT
      comment_number,
      date_added,
      MAX(date_edited) AS max_date_edited
    FROM
      tablename
    GROUP BY
      comment_number,
      date_added
  ) m ON c.comment_number=m.comment_number
      AND c.date_edited = m.max_date_edited