Получить последнее изображение из запроса SQL - PullRequest
0 голосов
/ 31 января 2012

У меня есть запрос, который показывает все изображения от пользователя. (В этом случае 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] => 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
        )

Может быть, вы можете показать мне более простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 31 января 2012

Поскольку вы не включаете много информации о том, как вы обрабатываете свой массив, мне придется сделать некоторые предположения

Если предположить, что массив, включенный в ваш вопрос, называется $image_list, то вы можете выполнить итерациюнад этим списком, используя цикл for.Как только вы достигнете конца цикла, вы просто напечатаете свою иконку.

$length = sizeof($image_list);
for ($i = 0; $i < $length; $i++)
{
    if ($i == $length) print "<img src=\"icon-goes-here.png\" />\n";
    printf("<img src=\"%s\" />\n", $image['image']);
}
0 голосов
/ 31 января 2012

Кажется, вам нужно все это в SQL ... вот одна попытка:

Select *,DateDiff(ms,max,CreatTime)
From (Select user,max(image_date) as max 
     From YourQuery
     Group By user) as a
Join (Select *
      from YourQuery) as b on b.user=a.user

Хотя я думаю, что более уместно делать это программно после получения результатов YourQuery, а не в результате двойного запроса.,

Возможно, есть и лучший способ сделать это одним запросом, не обращаясь к своему дважды.Не могу сейчас думать ни о чем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...