我有一个名为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函数剪切数组任何人都可以建议我更好的解决方案或单一查询来处理所有这些事情......
提前致谢..
答案 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 BY
和LIMIT
SELECT a.*
FROM images a
WHERE category = 'categoryName'
ORDER BY uploadDate DESC
LIMIT 1