2013-07-11 3 views
0

Существует таблица с именем user_transaction, который имеет следующую структуру:Как создать SQL-запрос для данного сценария?

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. После получения этой даты я хочу, чтобы выяснить следующие счетчики на сегодняшний день (т.е. 11/07/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. Может ли кто-нибудь помочь мне в этом отношении? Спасибо заранее.

+0

[Что вы пробовали?] (http://whathaveyoutried.com) –

+0

@ X.L.Ant: Должен ли я отправлять свой SQL-запрос, который я пробовал в теле вопроса? – PHPLover

+1

Да, пожалуйста, отправьте запрос – DevZer0

ответ

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 
+0

Большое вам спасибо за помощь. Это отлично подходит для моего требования. Можете ли вы предоставить мне условие WHERE, если я расскажу о двух датах (01/06/2013 и 30/06/2013)? – PHPLover

+0

'WHERE FROM_UNIXTIME (transaction_date) BETWEEN '2013-06-01' AND '2013-06-30'' –

+0

: Спасибо за ваш второй ответ. Но мой формат даты отличается от формата, указанного в ответе. Тогда как я должен использовать этот запрос? Должен ли я писать логику PHP, чтобы изменить формат даты, а затем использовать в запросе? – PHPLover

1

отфильтровывать сегодняшние сделки вы можете использовать ГДЕ дата (теперь()) == дата (TRANSACTION_DATE) или просто создать 2 даты из одного 11/07/2013 преобразуется в пару

11/07/2013 00:00:00 - 11/07/2013 23:59:59