[英]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表示它不是第一条记录,我想我可以做我想做的事情。
顺便说一句,我的图像表的字段如下:
是否可以在查询中再添加一个字段,以按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.