MySQL CONCAT: как добавить данные в конец строки и удалить данные в начале, если размер превышен? - PullRequest
1 голос
/ 28 февраля 2012

к сожалению я еще ничего не нашел, может кто-нибудь может мне помочь или подсказать?

У меня есть таблица с именем «users» и поле «last_login», где я хочу сохранить даты входа в систему, скажем, 30 входов в систему. Таким образом, каждый раз, когда пользователь успешно входит в систему, отметка времени должна добавляться в конец строки, поэтому она выглядит так:

logdindate1; logindate2; logindate3; ...

.. тогда как логиндаты - это временные метки определенного размера. Однако, если мы достигнем logindate31, logindate1 должен быть удален, а logindate31 добавлен в конце.

Есть ли способ сделать это очень легко в запросе MySQL или мне нужно проверить длину с помощью php? Если да, понадобится ли мне SELECT, проверьте длину, обрежьте ее и затем отдельное ОБНОВЛЕНИЕ? Или есть ли лучший способ сделать это вообще?

У меня до сих пор есть запрос (он не проверяет длину и ничего не вырезает):

<?php $query = "UPDATE user SET login_date = CONCAT(login_date,'".$logindate.";') WHERE id='".$user_id."';"; ?>

Большое спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

$query = "UPDATE user SET login_date = RIGHT(CONCAT(login_date,'".$logindate.";', 256)) WHERE id='".$user_id."';";

при условии, что 256 - это длина 30 логинов_даты + точки с запятой. См ПРАВО

0 голосов
/ 28 февраля 2012

Создайте таблицу login_history и вставьте туда новую дату входа.Используйте JOIN для получения дат входа пользователя.

Я настоятельно рекомендую вам получить базовое представление о том, что называется "нормализацией базы данных"

...