Как создать SQL-запрос для данного сценария?

Существует таблица с именем user_transaction, которая имеет следующую структуру:

transaction_id    mediumint(6)   UNSIGNED (PK)
transaction_no    varchar(55)
transaction_cc_avenue_no    varchar(55)
transaction_card_category    varchar(100)
transaction_user_id      varchar(32)
transaction_user_name    varchar(255)
transaction_user_email_id    varchar(255)
transaction_deal_code    varchar(10)
transaction_dc_id    smallint(4)
transaction_amount    float(10,2)
transaction_discount    float(10,2)
transaction_total_amount    float(10,2)
transaction_data_assign    enum('0', '1')
transaction_status    enum('success', 'inprocess', 'fail', 'cancelled')     
transaction_date    bigint(12)
transaction_update_date    bigint(12)
transaction_update_user_id    varchar(32)

Я использую значения UNIX Timestamp в полях transaction_date и transaction_update_date для хранения дат. Теперь моя проблема заключается в том, что я получаю сегодняшнюю дату в формате dd/mm/yyyy say (11/07/2013) из формы в PHP. После получения этой даты я хочу узнать следующие подсчеты только на сегодняшний день (т.е. 07.11.2013):

total count of all the transactions carried out,
total count of all the transactions having transaction_status as 'success',  
total count of all the transactions having transaction_status as 'inprocess',
total count of all the transactions having transaction_status as 'fail',
total count of all the transactions having transaction_status as 'cancelled'

Тот же вывод требуется и для двух дат (диапазон двух дат с обеими датами включительно). Я новичок в этих манипуляциях с временными метками UNIX. Может ли кто-нибудь помочь мне в этом отношении? Заранее спасибо.


person PHPLover    schedule 11.07.2013    source источник
comment
Что вы пробовали?   -  person xlecoustillier    schedule 11.07.2013
comment
@X.L.Ant: Должен ли я опубликовать свой SQL-запрос, который я пробовал, в теле вопроса?   -  person PHPLover    schedule 11.07.2013
comment
Да, пожалуйста, отправьте запрос   -  person DevZer0    schedule 11.07.2013


Ответы (2)


SELECT  COUNT(*) `carried out`,
        SUM(transaction_status = 'success') `success`,
        SUM(transaction_status = 'inprocess') `inprocess`,
        SUM(transaction_status = 'fail') `fail`,
        SUM(transaction_status = 'cancelled') `cancelled`
FROM    tableName
-- WHERE  add your conditions here

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

WHERE  FROM_UNIXTIME(transaction_date) >= CURDATE() AND
       FROM_UNIXTIME(transaction_date) < CURDATE() + INTERVAL 1 DAY
person John Woo    schedule 11.07.2013
comment
Большое вам спасибо за вашу помощь. Это идеально подходит для моего требования. Не могли бы вы предоставить мне условие ГДЕ, если я ставлю две даты, скажем (06.01.2013 и 30.06.2013)? - person PHPLover; 11.07.2013
comment
: Спасибо и за второй ответ. Но мой формат даты отличается от формата, который вы упомянули в ответе. Тогда как мне использовать этот запрос? Должен ли я написать логику PHP, чтобы изменить формат даты, а затем использовать в запросе? - person PHPLover; 11.07.2013

чтобы отфильтровать сегодняшние транзакции, вы можете использовать WHERE date(now())==date(transaction_date) или просто создать 2 даты из одной 07.11.2013, преобразованной в пару

11/07/2013 00:00:00 - 11/07/2013 23:59:59
person StanislavL    schedule 11.07.2013