Есть ли менее хакерский способ сделать это в MySQL? - PullRequest
1 голос
/ 27 ноября 2009

Мне нужно получить последний вставленный продукт пользователем. Это то, что я придумал

   $query = 'SELECT id
                 FROM products
                 WHERE user_id = ?
                ORDER BY id DESC
                       LIMIT 1';

Это должно работать, потому что идентификатор - автоинкремент. Для меня, однако, это кажется хакерским. Есть ли лучший способ сделать это?

Я не могу использовать mysql_last_insert_id() или что-то подобное, потому что мне нужен последний продукт определенного пользователя.

Ответы [ 4 ]

5 голосов
/ 27 ноября 2009

Я бы добавил столбец DATETIME в вашу таблицу для этой цели. Лично я не чувствую себя комфортно, полагаясь на поведение AUTO_INCREMENT с точки зрения заказа. Кроме того, его целью является «создание уникального идентификатора для новых строк». Кроме того, вы не должны заботиться о ценности.

4 голосов
/ 27 ноября 2009

Использование:

  SELECT MAX(t.id) AS id
    FROM PRODUCTS t
   WHERE t.user_id = ?

MAX - агрегатная функция, возвращающая максимальное значение указанного столбца. Поскольку запрос возвращает только один столбец - тот, в котором используется агрегатная функция - предложение GROUP BY указывать не нужно. Но нет никакого вреда в использовании:

  SELECT MAX(t.id) AS id
    FROM PRODUCTS t
   WHERE t.user_id = ?
GROUP BY t.user_id
1 голос
/ 27 ноября 2009

вы можете использовать

SELECT MAX(id) FROM ...

Не уверен, насколько лучше это будет, хотя:)

0 голосов
/ 27 ноября 2009

Я согласен с опцией Datetime Column. например, у вас есть столбец с именем LastAddedDate Datetime тогда вы можете сделать запрос, как

Выберите top (1) Products.Id from Продукты, где User_Id = @ UserId order по LastAddedDate, Id Desc

или в случае идентификатора также вы можете написать запрос

Выберите top (1) Products.Id from Продукты, где User_Id = @ UserId order по идентификатору Desc

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