SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.06.2009 14:07:16

pavluxa09
Участник
Зарегистрирован: 06.06.2009
Сообщений: 3

Объедененение MYSQL запросов одного типа в один

Здравствуйте. Помогите пожалуйста, нужно объединить пару запросов в один.

Запрос №1: SELECT count(id) as sites, SUM(allbonus) as allbonus FROM `bbs_projects` WHERE `rid` = '".$_SESSION['UserID']."' LIMIT 1;
Запрос №2: SELECT SUM(amount) as wmz_sum FROM `bbs_projects` WHERE `rid` = '".$_SESSION['UserID']."' AND `currency` = 'WMZ' LIMIT 1;
Запрос №3: SELECT SUM(amount) as wmr_sum FROM `bbs_projects` WHERE `rid` = '".$_SESSION['UserID']."' AND `currency` = 'WMR' LIMIT 1;

Как мне их объеденить в один? Это нужно с целью уменьшения количество запросов в базу.
Заранее спасибо.

Неактивен

 

#2 07.06.2009 13:04:10

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Объедененение MYSQL запросов одного типа в один

ИМХО, никак smile Точнее "как", но это будут просто подзапросы в запросе и при этом они ни разу не ускорят общую скорость выполнения. В общем, смысла в этом нет, разве-что если действительно надо просто одним запросом выполнить вместо трёх. Объединить можно типа так:
SELECT `t1`.`field1`, `t2`.`field2`, `t3`.`field3` FROM
   (SELECT `some_field` as `field1` FROM `table1` WHERE `some_field`='some_value') AS `t1`,
   (SELECT `some_field` as `field2` FROM `table2` WHERE `some_field`='some_value') AS `t2`,
   (SELECT `some_field` as `field3` FROM `table3` WHERE `some_field`='some_value') AS `t3`

Вроде ничего не напутал 8)


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 08.06.2009 12:44:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объедененение MYSQL запросов одного типа в один

Еще неплохой вариант — написать хранимую процедуру, которая выполняет три запроса. Но для
этого на стороне PHP нужно, чтобы использовался mysqli (обычные функции не поддерживают
вытаскивание нескольких resultset).

Неактивен

 

#4 08.06.2009 13:59:47

Magz
Гуру
Откуда: Москва
Зарегистрирован: 18.09.2007
Сообщений: 112

Re: Объедененение MYSQL запросов одного типа в один

Если задаться целью извратиться - всегда пожалуйста :-D


SELECT count(p.id) as sites, SUM(p.allbonus) as allbonus,
(SELECT SUM(amount) FROM p WHERE `currency` = 'WMZ') as wmz_sum,
(SELECT SUM(amount) FROM p WHERE `currency` = 'WMR') as wmr_sum
FROM (SELECT * FROM FROM `bbs_projects` WHERE `rid` = $_SESSION['UserID']) p
 

Не уверен, что во вложенных селектах можно использовать алиас таблицы из FROM. Если не заработает сразу сделайте дампы табличек и скиньте сюда, попробую поманьячить smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson