从用户SQL中选择第一个图像

时间:2012-01-30 00:25:32

标签: php 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 个答案:

答案 0 :(得分:3)

如果你可以在PHP中轻松地添加这个字段,那么让你的SQL数据库添加这个字段会很愚蠢。

只需创建一个布尔变量,在循环的第一次迭代中设置为false。

$first = true;

for( $data as $key => $value )
{
    if( $first )
    {
        echo "I'm the first row";
        $first = false;
    }

    // Do other stuff
}

编辑:如何识别数组中的第一个和最后一个项目

$keys = array_keys( $data );
$values = array_values( $data );

$count = count( $data );

for( $a = 0; $a < $count; $a++ )
{
    $key = $keys[ $a ];
    $value = $values[ $a ];

    if( $a == 0 )
    {
        // First
    }
    else if( $a+1 == $count )
    {
        // Last
    }

    // All
}

答案 1 :(得分:0)

你的意思是你想要第一个出现在数组中的图像或第一个具有最小id的图像吗?

应该可以使用

访问print_r中返回的数组中的第一个图像
$images_list[0]['image'].     

这不起作用吗?

如果要使用foreach语句在数组中查找第一个图像,可以在循环之前添加一个标记,如:

$firstImage = 0;    
foreach ($images_list as $key)     
{    
  $firstImage++;    
  if (firstImage == 1 )     
  {    
    $imageSrc = $key['image'];    
  }    
}    

请注意上面的代码尚未经过测试,只是一个指南。