Запрос значений с разделителями-запятыми в MySQL
Мне нужен способ запросить коллекцию данных. У меня есть список последних дат активности, каждая из которых хранится в 1 строке на пользователя. Каждая строка имеет поле loginDates, которое состоит из списка временных меток, разделенных запятыми.
Что мне нужно сделать, так это запустить отчеты за эту дату, чтобы найти людей, активных с отметки времени XXXXXX. Проблема в том, что он разделен запятыми, что означает, что я не могу запросить его, используя методы, которые я знаю.
Вот пример строки
id userID accessDates
2 6 1399494405,1399494465,1399494525,1399494585,1399494623
Чего я хочу достичь в виде простого текста
SELECT all_fields FROM accessTable WHERE accessDate > YESTERDAY
ТАКЖЕ Эти даты могут, однако, охватывать несколько сотен дней с сотнями временных отметок в поле.
1 ответ
Предполагая, что значения TimeStamp расположены по порядку, как показывает пример данных, если какое-либо из значений TimeStamp в строке будет больше заданной даты, то самое последнее будет также больше этого значения. Таким образом, вам нужно только самое последнее значение TimeStamp для удовлетворения ваших требований:
SET @Yesterday =
UNIX_TIMESTAMP(DATE_ADD(DATE(CURRENT_TIMESTAMP()),INTERVAL -1 DAY));
SELECT *
FROM accessTable
WHERE CAST(RIGHT(accessDates,10) AS UNSIGNED) > @Yesterday;
Если вы хотите запросить каждую из этих временных меток по отдельности, лучшее решение - поместить их в один столбец таблицы с идентификатором пользователя:
userID accessDate
------ ----------
6 1399494405
6 1399494465
6 1399494525
6 1399494585
6 1399494623