2015-02-03 7 views
0
SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id` 
FROM `o_cheque_request`, `o_member`, o_memberinfo` 
WHERE `o_cheque_request.member_id` = `o_member.member_id` 
AND `o_member.member_id` = `o_memberinfo.member_id` 
AND withdraw_date >='2012-07-21' 
AND `o_cheque_request.member_id` 
IN (SELECT `member_id` FROM `o_cheque_request` GROUP BY `member_id` HAVING SUM(gross_amount) <=10000) 
GROUP BY `o_cheque_request.withdraw_date`, `o_cheque_request.member_id` ORDER BY `request_id` DESC 

это занимает много времени, около 29 секунд, как уменьшить ... используя присоединиться ... Ребята, пожалуйста, помогите мне ... Структура таблицы для o_cheque_request
request_id BIGINT (20) без знака NOT NULL AUTO_INCREMENT,
wallet_id INT (11) NOT NULL по умолчанию '0',
member_id INT (10) без знака NOT NULL по умолчанию '0',
withdraw_date дата по умолчанию NULL,
amount INT (10) unsig Нед NOT NULL по умолчанию '0',
gross_amount поплавок (10,2) без знака NOT NULL по умолчанию '0,00',
admin_charge поплавок (10,2) без знака NOT NULL по умолчанию '0,00',
tds поплавок (10,2) неподписанных NOT NULL по умолчанию '0,00',
repurchase поплавок (10,2) без знака NOT NULL по умолчанию '0,00',
net_amount поплавок (10,2) без знака NOT NULL по умолчанию '0,00',
withdraw_type VARCHAR (50) по умолчанию NULL,
varchar (50) по умолчанию NULL,
cheque_no VARCHAR (50) по умолчанию NULL,
courier_name VARCHAR (50) по умолчанию NULL,
tracking_no VARCHAR (50) по умолчанию NULL,
cheque_date даты по умолчанию '0000-00-00',
PRIMARY KEY (request_id),
KEY member_id (member_id)
) ДВИГАТЕЛЬ = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 4738;
подзапросов (в/существует) для Присоединяется

+0

29 секунд, чтобы принести как много записей? и, пожалуйста, укажите свою структуру таблицы. –

+0

Эй, у меня более 4000 записей в таблице o_cheque_request ... –

+0

Просьба представить структуру таблицы соответствующим образом и для трех таблиц с их внутренними отношениями, которые вы использовали в запросе. –

ответ

0

TRY С ЭТОЙ

SELECT * FROM (
     SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id` 
     FROM `o_cheque_request` 
     JOIN `o_member` ON `o_cheque_request.member_id` = `o_member.member_id` 
     JOIN `o_memberinfo` ON `o_member.member_id` = `o_memberinfo.member_id` 
     WHERE withdraw_date >='2012-07-21' 
     GROUP BY `o_cheque_request.member_id` HAVING SUM(`o_cheque_request.gross_amount`) <=10000 
    ) AS T 
    GROUP BY `withdraw_date`, `member_id` ORDER BY `request_id` DESC 
+0

спасибо за ответ, но получило ** ошибку ** :: У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '( SELECT *, 'o_cheque_request.member_id',' o_cheque_request.wal' в строке 1 –

+0

Я обновил с небольшим исправлением –