Я использую PHP & База данных MYSQL, я хочу получить подробности выше конкретного аккаунта. Я использую 4 запроса, чтобы получить подробную информацию для учетной записи «Amar».
Мое требование состоит в том, что я должен использовать только один запрос, и мне нужно уменьшить время выполнения и улучшить оптимизацию запросов. Я думаю, было бы лучше, если бы мы использовали представления или концепции хранимых процедур. Я создал скрипку в sqlfiddle.com. Это ссылка
Требование:
Для вышеупомянутых двух требований я использовал следующий запрос.
select SUM(p.price) as sum , count(p.id) as count from account as a left join aproduct as p on a.id = p.account_id and p.category in ('category1','category2') where a.id = '1' group by a.id
Для вышеуказанного требования я использовал следующий запрос.
select a.id , a.name, count(p.id) from account as a left join aproduct as p on a.id = p.account_id where a.id = '1' group by a.id
Для вышеуказанного требования я использовал следующий запрос.
select a.id , a.name , ( select ADDDATE( MIN(p.added_date) , INTERVAL 115 DAY ) ) as added_date from account as a left join aproduct as p on a.id = p.account_id and p.category IN ('category1','category2') where a.id = '1' group by a.id
Для вышеупомянутых трех требований, я думаю, мы можем получить записи, используя следующий запрос
select a.id , a.name , p.available_date as added_date from account as a left join aproduct as p on a.id = p.account_id and p.category IN ('category1','category2') where a.id = '1' order by p.available_date asc limit 0,3
Мое предположение о последнем запросе, который я хочу:
select sum, count, min(added_date), first_oldest_date, second_oldest_date, third_oldest_date from table or view or stored procedure where account.id = '1'
МОЯ база данных SQL & ОПРЕДЕЛЕНИЕ ТАБЛИЦЫ.
CREATE TABLE IF NOT EXISTS `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `account`
--
INSERT INTO `account` (`id`, `name`, `date`) VALUES
(1, 'amar', '2014-10-06'),
(2, 'kumar', '2014-10-14'),
(3, 'ram', '2014-10-13');
-- --------------------------------------------------------
--
-- Table structure for table `aproduct`
--
CREATE TABLE IF NOT EXISTS `aproduct` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) NOT NULL,
`name` varchar(254) NOT NULL,
`price` varchar(255) NOT NULL,
`category` varchar(255) NOT NULL,
`available_date` date NOT NULL,
`added_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `aproduct`
--
INSERT INTO `aproduct` (`id`, `account_id`, `name`, `price`, `category`, `available_date`, `added_date`) VALUES
(1, 1, 'prodcut one', '20', 'category1', '2014-10-02', '2014-10-08 00:00:00'),
(2, 2, 'product two', '30', 'category2', '2014-10-05', '2014-10-03 00:00:00'),
(3, 1, 'product three', '30', 'category1', '2014-10-01', '2014-10-23 00:00:00'),
(4, 3, 'product four', '36', 'category4', '2014-09-03', '2014-10-04 00:00:00'),
(5, 2, 'product five', '54', 'category2', '2014-10-07', '2014-10-14 00:00:00'),
(6, 1, 'product six', '66', 'category6', '2014-10-03', '2014-10-06 00:00:00');
Любая помощь будет принята с благодарностью.
Задача ещё не решена.
Других решений пока нет …