繁体   English   中英

从用户SQL选择第一个图像

[英]Select first image from user 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
  • 用户身份
  • 图片
  • 日期

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

也许您可以告诉我更简单的方法?

当您可以在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
}

您是说要显示数组中的第一张图像还是ID最小的第一张图像?

应该使用以下命令访问在print_r中返回的数组中的第一张图像:

$images_list[0]['image'].     

这行不通吗?

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

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

请注意,上面的代码尚未经过测试,仅供参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM