Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка по дате 
V
    Опции темы
MrDmitry
Дата 27.6.2011, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Здравствуйте уважаемые форумчане. Помогите составитm sql запрос следующего характера

Делаю не большой интернет магазин. Нужно выбрать пользователей которые совершили операции за апрель месяц этого года более 2 раз

Таблица выглядит так

id (int)
user (varchar)
type (varchar)
date (int)
sum (int)
brand_id (int)

Дата хранится в UNIX формате (Записывается на php через time() ) База данных MySql

Сделал так

Код

SELECT user,  DATE_FORMAT(FROM_UNIXTIME(date),'%m%y') as date, 
      type FROM dp_operation where date in
      (select date from dp_operation 
       group by date having count(date)>1)


То есть вроде как sql запрос составлен верно. Но нет сравнения с датой, есть только выборка по кол-во совпадений дат. А как отобрать именно за Апрель?



PM MAIL   Вверх
Akina
Дата 27.6.2011, 12:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(MrDmitry @  27.6.2011,  13:19 Найти цитируемый пост)
вроде как sql запрос составлен верно

Последнее слово - лишнее.
Код

select `user` 
from `dp_operation`
where month(`date`) = 4 and year(`date`) = 2011
group by `user`
having count(`user`) > 1


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

Это сообщение отредактировал(а) Akina - 27.6.2011, 12:36


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
MrDmitry
Дата 27.6.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Спасибо работает. Но не полностью. Почему то sql запрос 
Код

year(`date`) = 2011


Дает пустой результат хотя в базе данных есть  1304051029 что равно 29.04.11
PM MAIL   Вверх
Akina
Дата 27.6.2011, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(MrDmitry @  27.6.2011,  15:15 Найти цитируемый пост)
Дает пустой результат хотя в базе данных есть  1304051029 

Кто-то говорил, что
Цитата(MrDmitry @  27.6.2011,  13:19 Найти цитируемый пост)
Дата хранится в UNIX формате 

Так вот - не верю. Ну хотя бы потому, что такого типа в MySQL тупо нет. Покажите create table.
 
Ну или для самостоятельного разбора:

Код

mysql> create table test(val long);
Query OK, 0 rows affected (0.11 sec)

mysql> insert into test values(1304051029);
Query OK, 1 row affected (0.05 sec)

mysql> select FROM_UNIXTIME(val) from test;
+---------------------+
| FROM_UNIXTIME(val)  |
+---------------------+
| 2011-04-29 08:23:49 |
+---------------------+
1 row in set (0.00 sec)

mysql> select FROM_UNIXTIME(val) from test where year(val)=2011;
Empty set (0.01 sec)

mysql> select FROM_UNIXTIME(val) from test where year(FROM_UNIXTIME(val))=2011;
+---------------------+
| FROM_UNIXTIME(val)  |
+---------------------+
| 2011-04-29 08:23:49 |
+---------------------+
1 row in set (0.00 sec)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
MrDmitry
Дата 27.6.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Большое спасибо. Разобрался.
PM MAIL   Вверх
Akina
Дата 27.6.2011, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



MrDmitry
да! чтобы всё это не тормозило безбожно, лучше поступите наоборот, и издевайтесь над константами, а не над полями:
Код

WHERE val BETWEEN UNIX_TIMESTAMP('2011-04-01 00:00:00') AND UNIX_TIMESTAMP('2011-04-30 23:59:59')

В этом случае при отборе будет использоваться индекс по val.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.