Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Вывод всех строк за этот месяц


Автор: jone31 18.11.2009, 19:12
подскажите, как вывести из БД записи за этот месяц. В бд есть столбец time(timestamp) который отвечает за дату добавления. 

Автор: Ипатьев 18.11.2009, 19:17
вообще-то, к РНР этот вопрос не имеет никакого отношения.
Это чистый SQL.

Вы когда-нибудь составляли запросы с оператором WHERE?

Автор: jone31 18.11.2009, 19:25
да, но как мне написать на php запрос что бы например вывести в интервале месяца
Код
$q2 = mysql_query("SELECT * FROM `events` WHERE `time` = ????? "); 


как в запросе написать интервал: 2009-11-01 00:00:00 - 2009-11-31 24:00:00 ?

Автор: Ипатьев 18.11.2009, 19:28
ну, во-первых, можно писать не равенство, а интервал. 
скажем, вы можете в РНР получить дату первого числа следующего месяца и последннего числа предыдущего?

во-вторых, чтобы писать равенство, лучше хранить не unix time, а дату во встроенном формате mysql, для которого есть множество функций преобразования

Автор: jone31 18.11.2009, 19:34
если писать не равенство то их получиться два, ведь насколько мне известно с  двойными неравенствами не дружит.

Автор: ruX 18.11.2009, 19:39
мой вариант
Код

SELECT FROM `events` WHERE `time` > UNIX_TIMESTAMP( CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-01') 

аналогично можно было на пхп подсчитать начало месяца в юникстайм и подставить

Автор: Ипатьев 18.11.2009, 19:40
Кто не дружит? 
И почему два? Два двойных имеется в виду? В этом нет ни малейшей нужды.
просто сравнить дату, чтобы она ыла больше последнего дня предыдущего месяца и меньше первого для следующего. два сравнения

Автор: ruX 18.11.2009, 19:40
Цитата(jone31 @  18.11.2009,  19:34 Найти цитируемый пост)
если писать не равенство то их получиться два, ведь насколько мне известно с  двойными неравенствами не дружит.

Вам не правильно известно

Автор: jone31 18.11.2009, 20:05
что то здесь не так:
Код
$q2 = mysql_query("SELECT FROM `events` WHERE `time` > UNIX_TIMESTAMP( CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-01')"); 

while($n1 = mysql_fetch_array($q2)){
    echo '
    <td>'.$n1['user_id'].'</td>
    <td>'.$n1['time'].'</td>
    <td>'.$n1['type'].'</td>
    <td>'.$n1['msg'].'</td>
  </tr>
';
}
Цитата
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Автор: bars80080 18.11.2009, 20:19
одной скобки не хватает

Код

SELECT FROM `events` WHERE `time` > UNIX_TIMESTAMP( CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-01'))

Автор: Pitlord 18.11.2009, 20:26
Цитата(bars80080 @  18.11.2009,  20:19 Найти цитируемый пост)
    
SELECT FROM `events` WHERE `time` > UNIX_TIMESTAMP( CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-01'))

Типа поля TIMESTAMP не UNIX TIMESTAMP.

Автор: jone31 18.11.2009, 20:26
Цитата(bars80080 @  18.11.2009,  20:19 Найти цитируемый пост)
одной скобки не хватаеткод SQL1:SELECT FROM `events` WHERE `time` > UNIX_TIMESTAMP( CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-01'))

да, я уже заметил, но та же ошибка. Тут выражение UNIX_TIMESTAMP неверно записано.

Добавлено через 1 минуту и 30 секунд
Цитата(Pitlord @  18.11.2009,  20:26 Найти цитируемый пост)
Типа поля TIMESTAMP не UNIX TIMESTAMP.

эт разве не одно и тоже?

Добавлено через 5 минут и 35 секунд
мне наверно лучше будет из всех записей выбрать  нужные при помощи php.

Автор: Ипатьев 18.11.2009, 20:38
нет, не лучше.
так вообще никогда не надо делать
если возникают такие идеи, то лучше совсем ничего не делать, а найти себе какое-нибудь другое занятие.

Автор: jone31 18.11.2009, 20:39
Цитата(Ипатьев @  18.11.2009,  20:38 Найти цитируемый пост)
нет, не лучше.так вообще никогда не надо делатьесли возникают такие идеи, то лучше совсем ничего не делать, а найти себе какое-нибудь другое занятие.


почему ты так считаешь?

Автор: Pitlord 18.11.2009, 20:48
Цитата(jone31 @  18.11.2009,  20:26 Найти цитируемый пост)
эт разве не одно и тоже?

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

Автор: Ипатьев 18.11.2009, 20:56
Цитата(jone31 @  18.11.2009,  20:39 Найти цитируемый пост)
почему ты так считаешь?

протому что это букварь, начальная школа.
это как законы физики.
База данных служит для хранения и обработки информации. Она для этого предназначена. У нее есть тысяча механизмов, предназначенных для решения этой задачи. Это как роторный экскаватор при добыче угля. База может легко обработать миллион строк и выдать одну нужную. 
Все операции по работе с данными должны быть возложены на базу. Пхп должентолько получить результат и отдать его пользователю.

А перенося задачу поиска в клиентское приложение (пхп выступает по отношению к базе как клиент), мы возвращаемся в первобытный строй, с каменными скребками.  пхп умрет на десятке тысяч. он совсем для другого предназначен. 
Я понимаю, что сейчас событий в базе не 10 тысяч. Но это все равно не повод делать неправильно. Этот кусок кода так и останется, и в какой-то момент уронит всю систему. 

Автор: jone31 18.11.2009, 20:59
Цитата(Ипатьев @  18.11.2009,  20:56 Найти цитируемый пост)
протому что это букварь, начальная школа.это как законы физики.
База данных служит для хранения и обработки информации. Она для этого предназначена. У нее есть тысяча механизмов, предназначенных для решения этой задачи. Это как роторный экскаватор при добыче угля. База может легко обработать миллион строк и выдать одну нужную. Все операции по работе с данными должны быть возложены на базу. Пхп должентолько получить результат и отдать его пользователю.

А перенося задачу поиска в клиентское приложение (пхп выступает по отношению к базе как клиент), мы возвращаемся в первобытный строй, с каменными скребками.  пхп умрет на десятке тысяч. он совсем для другого предназначен. Я понимаю, что сейчас событий в базе не 10 тысяч. Но это все равно не повод делать неправильно. Этот кусок кода так и останется, и в какой-то момент уронит всю систему. 


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)