-2

imagesという名前のテーブルが1つあります

ここにあります :

+------------------+---------------+----------------------+
| 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  |
+------------------+---------------+----------------------+

ここで、画像のカテゴリごとに取得したいと思います。これは、一度に各カテゴリから画像を取得し、uploaddate の降順で取得することを意味します。

提案しないでください :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 に答える