我有一个查询,显示用户的所有图像。 (在这种情况下,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表示在按日期排序时它是否是结果集中的最新记录?
也许你可以告诉我一个更简单的方法吗?
答案 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'];
}
}
请注意上面的代码尚未经过测试,只是一个指南。