2009-08-20 5 views
1

У меня есть поле на моем столе, которое называется X, и я храню unixtime (php -> time()). Мой вопрос:Unixtime & mysql

Как я могу перечислить все месяцы из моей БД, что-то вроде: 6,2009 8,2009 и т.д ..

И мой второй вопрос:

Как может Я делаю запрос, чтобы перечислить всю информацию по месяцам и годам в одном и том же поле X (я храню unixtime), я знаю, что это не сработает, но mabe вы можете понять это лучше: где date = '06 .2009 '

Любые решения?

ответ

1
  • Список всех месяцев:

    SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) FROM MyTable; 
    
  • Возвращает все строки с заданным год & месяц:

    SELECT * FROM MyTable 
    WHERE EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) = 200906; 
    
+0

Будет ли предложение WHERE во втором запросе требовать полного сканирования таблицы? –

+0

Да, я так считаю. Вы должны использовать EXPLAIN для анализа запроса, чтобы убедиться, как оптимизатор MySQL будет его обрабатывать. –

1

Чтобы ответить на ваш первый вопрос, вы могли бы сделать это с группировка:

SELECT FROM_UNIXTIME(timestamp_column, '%c.%Y') AS month, some_other_column FROM table_name GROUP BY month; 

Что касается вашего второго вопроса, это зависит от того, что вы пытаетесь сделать. Например:

SELECT AVG(payment), SUM(*), FROM_UNIXTIME(timestamp_column, '%c.%Y') AS month, some_other_column FROM table_name WHERE timestamp_column BETWEEN UNIX_TIMESTAMP(200906) AND UNIX_TIMESTAMP(200907) - 1 GROUP BY month; 

Возврат среднего значения платежей и количества (суммы) строк для каждой группы.

Чтобы получить информацию разгруппирована от определенного периода времени, уменьшить запрос следующим образом:

SELECT payment, some_other_column FROM table_name WHERE timestamp_column BETWEEN UNIX_TIMESTAMP(200906) AND UNIX_TIMESTAMP(200907) - 1; 
1

Попробуйте

  1. ВЫБОР FROM_UNIXTIME (X, '% м% Y.') FROM TABLE GROUP BY FROM_UNIXTIME (Х, '% м.% Y')

  2. SELECT * из таблицы, где FROM_UNIXTIME (Х, '% м.% Y') = '06,2009'

Bye

Смежные вопросы