-2

我有一张名为 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 循环并从该特定类别中获取图像。

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

=> 按日期排列图像。

=> 根据我们的分页限制和页码使用 array_slice 函数切割数组

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

提前致谢..

4

1 回答 1

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
于 2013-01-28T13:04:52.920 回答