从查询SQL获取最后一个图像

时间:2012-01-30 22:44:06

标签: mysql sql

我有一个查询,显示用户的所有图像。 (在这种情况下,user_id = 3。)

我想在用户记录附近返回查询和显示的结果,这是我上传的静态图片。这张照片是一个小图标。

这是我的SQL查询:

$sql = "SELECT username as user, p.image as user_image, i.image, i.id as image_id, i.description as text, UNIX_TIMESTAMP(i.date) as image_date, COALESCE ( imgcount.cnt, 0 ) as comments
        FROM users u
        LEFT JOIN images i ON i.user_id = u.id
        LEFT JOIN images p ON p.id = (SELECT b.id FROM images AS b where u.id = b.user_id ORDER BY b.id DESC LIMIT 1)
        LEFT JOIN (SELECT image_id, COUNT(*) as cnt FROM commentaries GROUP BY image_id  ) imgcount ON i.id = imgcount.image_id
        WHERE i.user_id = 3
        ORDER BY i.date DESC";

以下是结果:

[images_list] => Array
    (
        [0] => Array
            (
                [user] => 3333
                [user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_nsm5rixy14lexm9cy15wzyg9u_224.jpg
                [image] => http://127.0.0.1/auth_system_1/upload_images/224/224_nsm5rixy14lexm9cy15wzyg9u_224.jpg
                [image_id] => 5
                [text] => 
                [image_date] => 7 hours, 1 minute
                [comments] => 2
            )

        [1] => Array
            (
                [user] => 3333
                [user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_nsm5rixy14lexm9cy15wzyg9u_224.jpg
                [image] => http://127.0.0.1/auth_system_1/upload_images/224/224_gfbyjh6zf66g914e28bsfdkuf_f4d.jpg
                [image_id] => 3
                [text] => 
                [image_date] => 20 hours, 50 minutes
                [comments] => 0
            )

        [2] => Array
            (
                [user] => 3333
                [user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_nsm5rixy14lexm9cy15wzyg9u_224.jpg
                [image] => http://127.0.0.1/auth_system_1/upload_images/224/224_80jrg3z0xrh9isskc3yuhtqh1_163.jpeg
                [image_id] => 1
                [text] => test1
                [image_date] => 1 day, 22 hours
                [comments] => 0
            )

    )

我不知道如何在查询返回的第一个图像附近放置一个小图标。如果我有一个字段,其中1表示它是第一个记录,或者1表示它不是用户的第一个上传图像,我想我可以做我想要的。

顺便说一下,我的图像表的字段如下:

  • ID
  • USER_ID
  • 图像
  • 日期

是否可以在查询中再添加一个字段,用1或0表示在按日期排序时它是否是结果集中的最新记录?

我的目标是在此图片附近播放图标

    [2] => Array
        (
            [user] => 3333
            [user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_nsm5rixy14lexm9cy15wzyg9u_224.jpg
            [image] => http://127.0.0.1/auth_system_1/upload_images/224/224_80jrg3z0xrh9isskc3yuhtqh1_163.jpeg
            [image_id] => 1
            [text] => test1
            [image_date] => 1 day, 22 hours
            [comments] => 0
        )

也许你可以告诉我一个更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

由于您没有包含有关如何处理数组的大量信息,因此我必须做出一些假设

假设您在问题中包含的数组名为$image_list,那么您可以使用for循环遍历此列表。一旦到达循环结束,您只需打印图标。

$length = sizeof($image_list);
for ($i = 0; $i < $length; $i++)
{
    if ($i == $length) print "<img src=\"icon-goes-here.png\" />\n";
    printf("<img src=\"%s\" />\n", $image['image']);
}

答案 1 :(得分:0)

似乎你想在SQL中使用这一切......这是一次尝试:

Select *,DateDiff(ms,max,CreatTime)
From (Select user,max(image_date) as max 
     From YourQuery
     Group By user) as a
Join (Select *
      from YourQuery) as b on b.user=a.user

虽然我认为在获取YourQuery的结果而不是这个双重查询混乱后,以编程方式执行此操作更合适。

在一次查询中可能还有一种更好的方法可以在不调用你的情况下两次。暂时不能想到任何事情。