我有一个查询,显示来自用户的所有图像。(在这种情况下,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指示它是否是结果集中的最新记录?
也许你可以给我看一个更简单的方法?
如果在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'];
}
}
请注意,上面的代码还没有经过测试,只是一个指南。