如何在group by语句中使用order by子句

时间:2014-03-04 04:17:18

标签: php mysql group-by

我有两张表tbl_issue_log, tbl_magazine_issue

tbl_issue_log
============

+----------+--------+--------+-----------+---------------------+
| issue_id | mag_id | log_id | operation |    updated_time     |
+----------+--------+--------+-----------+---------------------+
| 2        | 1      | 1      | 1         | 2014-01-30 21:29:44 |
| 3        | 4      | 1      | 1         | 2015-01-30 21:29:44 |
| 2        | 1      | 1      | 3         | 2015-01-31 21:29:44 |
+----------+--------+--------+-----------+---------------------+

tbl_magazine_issue
=================
+----------+-------------+-------------+------------------+------------+------------+-------------------+---------------+
| ISSUE_ID | ISSUE_NAME  | MAGAZINE_ID | COVER_PAGE_THUMB | FROM_DATE  |  TO_DATE   | issue_description | login_page_no |
+----------+-------------+-------------+------------------+------------+------------+-------------------+---------------+
| 2        | test issue  | 1           | cover page       | 2014-01-30 | 2015-01-30 | sdssdg fsdf       | 20            |
| 3        | test issue1 | 4           | cover page1      | 2014-01-30 | 2015-01-30 | sdssdg fsdf       | 20            |
+----------+-------------+-------------+------------------+------------+------------+-------------------+---------------+
tbl_issue_log中的

包含相同问题ID的多个记录。我一次只想要一个问题 这必须是最新更新的时间。

我的查询是

SELECT 
    `tbl_issue_log`.`operation`,
    `tbl_magazine_issue`.`ISSUE_ID`,
    `tbl_magazine_issue`.`ISSUE_NAME`,
    `tbl_magazine_issue`.`MAGAZINE_ID`,
    `tbl_magazine_issue`.`COVER_PAGE_THUMB`,
    `tbl_magazine_issue`.`FROM_DATE`,
    `tbl_magazine_issue`.`TO_DATE`,
    `tbl_magazine_issue`.`issue_description`,
    `tbl_magazine_issue`.`login_page_no`
FROM
    `tbl_issue_log`
        LEFT JOIN
    `tbl_magazine_issue` ON tbl_magazine_issue.ISSUE_ID = tbl_issue_log.issue_id


WHERE
    (tbl_issue_log.mag_id = '1')
        AND (tbl_magazine_issue.ISSUE_STATUS = 3)
        AND (tbl_issue_log.updated_time > '2014-02-25 00:42:22')
GROUP BY tbl_issue_log.issue_id
ORDER BY tbl_issue_log updated_time DESC;

这里我有基于问题ID的输出。但没有获得最新更新的定时记录。

如果有任何关于此的请帮助我。

2 个答案:

答案 0 :(得分:0)

您可以尝试将order by子句更改为

ORDER BY tbl_issue_log.updated_time  DESC;

编辑--- 当您在issue_id上​​进行分组时,mysql将选择与issue_id匹配的第一行。以后运行的订单基本上不会返回您要查找的内容。您可能需要使用子查询方法。

select some_table.* FROM 
(
SELECT 
    MAX(tbl_issue_log.updated_time) AS updated_time,
    `tbl_issue_log`.`operation`,
    `tbl_magazine_issue`.`ISSUE_ID`,
    `tbl_magazine_issue`.`ISSUE_NAME`,
    `tbl_magazine_issue`.`MAGAZINE_ID`,
    `tbl_magazine_issue`.`COVER_PAGE_THUMB`,
    `tbl_magazine_issue`.`FROM_DATE`,
    `tbl_magazine_issue`.`TO_DATE`,
    `tbl_magazine_issue`.`issue_description`,
    `tbl_magazine_issue`.`login_page_no`
FROM
    `tbl_issue_log`
        LEFT JOIN
    `tbl_magazine_issue` ON tbl_magazine_issue.ISSUE_ID = tbl_issue_log.issue_id


WHERE
    (tbl_issue_log.mag_id = '1')
        AND (tbl_magazine_issue.ISSUE_STATUS = 3)
        AND (tbl_issue_log.updated_time > '2014-02-25 00:42:22')
GROUP BY tbl_issue_log.issue_id
) some_table
ORDER BY some_table.updated_time DESC;

答案 1 :(得分:0)

试试这个

SELECT * FROM
(SELECT 
`tbl_issue_log`.`operation`,
`tbl_magazine_issue`.`ISSUE_ID`,
`tbl_magazine_issue`.`ISSUE_NAME`,
`tbl_magazine_issue`.`MAGAZINE_ID`,
`tbl_magazine_issue`.`COVER_PAGE_THUMB`,
`tbl_magazine_issue`.`FROM_DATE`,
`tbl_magazine_issue`.`TO_DATE`,
`tbl_magazine_issue`.`issue_description`,
`tbl_magazine_issue`.`login_page_no`
FROM
`tbl_issue_log`
    LEFT JOIN
`tbl_magazine_issue` ON tbl_magazine_issue.ISSUE_ID = tbl_issue_log.issue_id
WHERE
(tbl_issue_log.mag_id = '1')
    AND (tbl_magazine_issue.ISSUE_STATUS = 3)
    AND (tbl_issue_log.updated_time > '2014-02-25 00:42:22')
ORDER BY tbl_issue_log.updated_time DESC ) TEMP_TABLE
GROUP BY ISSUE_ID