如何从数据库类别中获取最新记录?

时间:2013-01-28 13:02:17

标签: php mysql

我有一个名为images

的表

这里是:

+------------------+---------------+----------------------+
| iid |  category  |   imagename   |       uploaddate     |
+------------------+---------------+----------------------+
|  1  |    cat1    |    123.png    | 2013-01-01 01:01:01  |
|  2  |    cat2    |    456.png    | 2013-01-01 01:01:02  |
|  3  |    cat2    |    789.png    | 2013-01-01 01:01:03  |
|  4  |    cat3    |    001.png    | 2013-01-01 01:01:04  |
|  5  |    cat3    |    002.png    | 2013-01-01 01:01:05  |
|  6  |    cat3    |    002.png    | 2013-01-01 01:01:06  |
|  7  |    cat4    |    004.png    | 2013-01-01 01:01:07  |
|  8  |    cat4    |    005.png    | 2013-01-01 01:01:08  |
|  9  |    cat4    |    006.png    | 2013-01-01 01:01:09  |
|  10 |    cat4    |    007.png    | 2013-01-01 01:01:10  |
+------------------+---------------+----------------------+

现在我想要明智地检索图像。它意味着一次从每个类别获取图像,并按上传日期降序排列。

请不要建议:SELECT * FROM images GROUP BY category ORDER BY uploaddate DESC 因为我使用分页来显示图像,每个页面包含来自不同类别的不同图像。

我解决了这个问题,但有另一种解决方法...... 在这里我的解决方案:

=>找到所有不同的类别并将其保存在数组中。

=>迭代循环并从特定类别中获取图像。

for($i=0;$i<count($distinctcat);$i++)
    {
        $qry = "SELECT * FROM images WHERE category = '".$distinctcat."'";
        // fetch that data then save it in to array
    }

=&GT;按日排列图像。

=&GT;根据我们的分页限制和页码

使用array_slice函数剪切数组

任何人都可以建议我更好的解决方案或单一查询来处理所有这些事情......

提前致谢..

1 个答案:

答案 0 :(得分:3)

以下查询将获取每个类别的所有最新图像

SELECT  a.*
FROM    images a
        INNER JOIN
        (
            SELECT  category, MAX(uploaddate) max_date
            FROM    images
            GROUP   BY category
        ) b ON a.category = b.category AND
                a.uploadDate = b.max_date

但如果您只想要特定category,则可以使用ORDER BYLIMIT

SELECT  a.*
FROM    images a
WHERE   category = 'categoryName'
ORDER   BY uploadDate DESC
LIMIT   1