Запрос значений с разделителями-запятыми в 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
Другие вопросы по тегам