Mysql запрос оптимизации и уменьшения количества запросов

Я использую PHP & База данных MYSQL, я хочу получить подробности выше конкретного аккаунта. Я использую 4 запроса, чтобы получить подробную информацию для учетной записи «Amar».
Мое требование состоит в том, что я должен использовать только один запрос, и мне нужно уменьшить время выполнения и улучшить оптимизацию запросов. Я думаю, было бы лучше, если бы мы использовали представления или концепции хранимых процедур. Я создал скрипку в sqlfiddle.com. Это ссылка

Требование:

  1. сумма цены товара, назначенная на счет (amar). продукт должен быть отнесен к категории «категория1» или «категория2».
  2. номер продукта, назначенный для учетной записи (amar). где продукт должен быть отнесен к категории «категория1» или «категория2».

Для вышеупомянутых двух требований я использовал следующий запрос.

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
  1. получить общее количество товара, назначенного аккаунту (amar).

Для вышеуказанного требования я использовал следующий запрос.

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
  1. В учетной записи (amar) получите самую старую дату добавленной даты продукта + 115 дней, когда продукт назначен категории «категория1» или «категория2».

Для вышеуказанного требования я использовал следующий запрос.

 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
  1. В учетной записи (amar) получите самую старую дату available_date продукта, когда продукт назначен категории «category1» или «category2».
  2. В учетной записи (amar) получите вторую самую старую дату available_date для продукта, когда продукт назначен категории «category1» или «category2».
  3. В учетной записи (amar) получите третью самую старую дату доступного_датера продукта, когда продукт назначен категории «category1» или «category2».

Для вышеупомянутых трех требований, я думаю, мы можем получить записи, используя следующий запрос

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');

Любая помощь будет принята с благодарностью.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]