Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: объединить два запроса
 
 автор: enodik   (26.04.2011 в 22:13)   письмо автору
 
 

подскажите пожалуйста как можно объединить два запроса:
1) SELECT distinct
sessya.login AS login,
IFNULL(bd1.total, 0) AS totalbd1,
IFNULL(bd2.total, 0) AS totalbd2,
(IFNULL(bd1.total, 0) + IFNULL(bd2.total, 0)) AS totalitog
FROM
sessya
LEFT JOIN
(SELECT login, COUNT(id_otv) AS total
FROM sessya
WHERE bd='1' AND
result='Верно'
GROUP BY login) AS bd1
USING(login)
LEFT JOIN
(SELECT login, COUNT(id_otv) AS total
FROM sessya
WHERE bd='2' AND
result='Верно') AS bd2
USING(login)
ORDER BY sessya.login

2) select
new.jos_comprofiler.firstname, new.jos_comprofiler.middlename, new.jos_comprofiler.lastname, new.jos_users.username
from
new.jos_comprofiler
join
new.jos_users
on
new.jos_comprofiler.user_id=jos_users.id
запросы находятся в разных БД:1- uchet, 2- new. запросы имею общее поле new.jos_comprofiler.user_id=jos_users.id =uchet.sessya.login

  Ответить  
 
 автор: cheops   (26.04.2011 в 23:00)   письмо автору
 
   для: enodik   (26.04.2011 в 22:13)
 

Можно попробовать, хотя не уверен, что удастся без дампов и тестов их объеденить.

PS А какова цель такого объединения (скорость, удобство, что-то еще)?

  Ответить  
 
 автор: enodik   (26.04.2011 в 23:09)   письмо автору
 
   для: cheops   (26.04.2011 в 23:00)
 

наверное удобство..
первый запрос выводит на экран таблицу, содержащую логин пользователя, количество ответов по 1 БД, по 2 БД, итоговое количество.
второй запрос выводит на экран не только логин, но и сведения о пользователе, в частности фамилию, имя и отчество.


в итоге мне нужен запрос который выведет данные из первого запроса: количество ответов по 1 БД, по 2 БДб итоговое количество, а вместо логина будет выведен результат второго запроса: имя, фамилия и отчество

  Ответить  
 
 автор: cheops   (27.04.2011 в 10:45)   письмо автору
 
   для: enodik   (26.04.2011 в 22:13)
 

Можно попробовать следующий запрос, однако, я не уверен, что он сработает, так как проверить и отладить его не начем (нужны бы дампы).
SELECT distinct
  uchet.sessya.login AS login, 
  IFNULL(uchet.bd1.total, 0) AS totalbd1, 
  IFNULL(uchet.bd2.total, 0) AS totalbd2, 
  (IFNULL(uchet.bd1.total, 0) + IFNULL(uchet.bd2.total, 0)) AS totalitog,
  new.jos_comprofiler.firstname,
  new.jos_comprofiler.middlename,
  new.jos_comprofiler.lastname,
  new.jos_users.username
FROM 
  uchet.sessya 
LEFT JOIN 
  (SELECT uchet.login, COUNT(uchet.id_otv) AS total 
   FROM uchet.sessya 
   WHERE uchet.bd='1' AND 
         uchet.result='Верно' 
   GROUP BY uchet.login) AS uchet.bd1 
USING(uchet.login) 
LEFT JOIN 
  (SELECT uchet.login, COUNT(uchet.id_otv) AS total 
   FROM uchet.sessya 
   WHERE bd='2' AND 
         result='Верно') AS uchet.bd2 
USING(login)
LEFT JOIN 
  new.jos_users 
ON new.jos_users.id = uchet.sessya.login
LEFT JOIN 
  new.jos_comprofiler 
ON 
 new.jos_comprofiler.user_id = new.jos_users.id
ORDER BY sessya.login

  Ответить  
 
 автор: enodik   (27.04.2011 в 14:23)   письмо автору
 
   для: cheops   (27.04.2011 в 10:45)
 

выдает ошибку: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.bd1 USING(uchet.login) LEFT JOIN (SELECT uchet.login, COUNT(uchet.id_otv) ' at line 17

БД uchet

-- Структура таблицы `sessya`
--

CREATE TABLE IF NOT EXISTS `sessya` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(150) DEFAULT NULL,
`id_otv` int(11) NOT NULL,
`bd` int(2) NOT NULL,
`nam_vopr` int(3) NOT NULL,
`result` varchar(10) CHARACTER SET cp1251 NOT NULL,
`zapros` varchar(255) CHARACTER SET cp1251 NOT NULL,
PRIMARY KEY (`id`),
KEY `id_otv` (`id_otv`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=69 ;

--
-- Дамп данных таблицы `sessya`
--

INSERT INTO `sessya` (`id`, `login`, `id_otv`, `bd`, `nam_vopr`, `result`, `zapros`) VALUES
(67, 'enodik', 2, 1, 2, 'Не верно', 'SELECT onum, amt, odate FROM Orders'),
(30, 'admin', 3, 1, 3, 'Верно', 'SELECT city, sname, snum, comm FROM Salespeople'),
(31, 'admin', 4, 1, 4, 'Не верно', 'SELECT city FROM Salespeople'),
(68, '', 4, 1, 4, 'Не верно', 'SELECT onum, amt, odate \n FROM Orders;');




--
-- База данных: `new`
--

-- --------------------------------------------------------

--
-- Структура таблицы `jos_comprofiler`
--

CREATE TABLE IF NOT EXISTS `jos_comprofiler` (
`id` int(11) NOT NULL DEFAULT '0',
`user_id` int(11) NOT NULL DEFAULT '0',
`firstname` varchar(100) DEFAULT NULL,
`middlename` varchar(100) DEFAULT NULL,
`lastname` varchar(100) DEFAULT NULL,
`hits` int(11) NOT NULL DEFAULT '0',
`message_last_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`message_number_sent` int(11) NOT NULL DEFAULT '0',
`avatar` varchar(255) DEFAULT NULL,
`avatarapproved` tinyint(4) NOT NULL DEFAULT '1',
`approved` tinyint(4) NOT NULL DEFAULT '1',
`confirmed` tinyint(4) NOT NULL DEFAULT '1',
`lastupdatedate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`registeripaddr` varchar(50) NOT NULL DEFAULT '',
`cbactivation` varchar(50) NOT NULL DEFAULT '',
`banned` tinyint(4) NOT NULL DEFAULT '0',
`banneddate` datetime DEFAULT NULL,
`unbanneddate` datetime DEFAULT NULL,
`bannedby` int(11) DEFAULT NULL,
`unbannedby` int(11) DEFAULT NULL,
`bannedreason` mediumtext,
`acceptedterms` tinyint(1) NOT NULL DEFAULT '0',
`cb_` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`),
KEY `apprconfbanid` (`approved`,`confirmed`,`banned`,`id`),
KEY `avatappr_apr_conf_ban_avatar` (`avatarapproved`,`approved`,`confirmed`,`banned`,`avatar`),
KEY `lastupdatedate` (`lastupdatedate`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `jos_comprofiler`
--

INSERT INTO `jos_comprofiler` (`id`, `user_id`, `firstname`, `middlename`, `lastname`, `hits`, `message_last_sent`, `message_number_sent`, `avatar`, `avatarapproved`, `approved`, `confirmed`, `lastupdatedate`, `registeripaddr`, `cbactivation`, `banned`, `banneddate`, `unbanneddate`, `bannedby`, `unbannedby`, `bannedreason`, `acceptedterms`, `cb_`) VALUES
(62, 62, NULL, NULL, NULL, 0, '0000-00-00 00:00:00', 0, NULL, 1, 1, 1, '0000-00-00 00:00:00', '', '', 0, NULL, NULL, NULL, NULL, NULL, 0, NULL),
(66, 66, NULL, NULL, NULL, 0, '0000-00-00 00:00:00', 0, NULL, 1, 1, 1, '0000-00-00 00:00:00', '127.0.0.1', '', 0, NULL, NULL, NULL, NULL, NULL, 0, NULL),
(67, 67, 'Елена', 'Александровна', 'Гришина', 0, '0000-00-00 00:00:00', 0, NULL, 1, 1, 1, '2011-04-22 19:09:13', '127.0.0.1', '', 0, NULL, NULL, NULL, NULL, NULL, 0, 'po83'),
(68, 68, 'катя', 'алексеевна', 'петрова', 0, '0000-00-00 00:00:00', 0, NULL, 1, 1, 1, '0000-00-00 00:00:00', '127.0.0.1', '', 0, NULL, NULL, NULL, NULL, NULL, 0, 'по83');

-- --------------------------------------------------------

--
-- Структура таблицы `jos_users`
--

CREATE TABLE IF NOT EXISTS `jos_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`username` varchar(150) NOT NULL DEFAULT '',
`email` varchar(100) NOT NULL DEFAULT '',
`password` varchar(100) NOT NULL DEFAULT '',
`usertype` varchar(25) NOT NULL DEFAULT '',
`block` tinyint(4) NOT NULL DEFAULT '0',
`sendEmail` tinyint(4) DEFAULT '0',
`gid` tinyint(3) unsigned NOT NULL DEFAULT '1',
`registerDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastvisitDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`activation` varchar(100) NOT NULL DEFAULT '',
`params` text NOT NULL,
PRIMARY KEY (`id`),
KEY `usertype` (`usertype`),
KEY `idx_name` (`name`),
KEY `gid_block` (`gid`,`block`),
KEY `username` (`username`),
KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=69 ;

--
-- Дамп данных таблицы `jos_users`
--

INSERT INTO `jos_users` (`id`, `name`, `username`, `email`, `password`, `usertype`, `block`, `sendEmail`, `gid`, `registerDate`, `lastvisitDate`, `activation`, `params`) VALUES
(62, 'Administrator', 'admin', 'merchandising@list.ru', '102faca11d13c04abf34ad9f2d9ee710:hpx10DQJN4af79bvyYGtRU0MCaHy06z9', 'Super Administrator', 0, 1, 25, '2011-03-04 11:50:24', '2011-04-26 11:26:24', '', ''),
(66, 'Родион', 'Rodion', 'samsonov.rodion@mail.ru', '88aaca7484e889dedd371d286670a0dc:FKCJZlRsk2gTAsr0YH962XvpAvao12oU', 'Registered', 0, 0, 18, '2011-03-04 11:23:01', '2011-03-22 19:21:44', '', '\n'),
(67, 'Елена Александровна Гришина', 'enodik', 'elena_grishina@list.ru', '833ef2ef11cd1eb122a51c8e6dbbfbe7:F2fsrmKM80v5UKfw6AhfMGPDaXldrBnK', 'Registered', 0, 0, 18, '2011-03-30 17:42:28', '2011-04-26 17:59:54', '', 'language=\ntimezone=0\n\n'),
(68, 'катя алексеевна петрова', 'природа', 'enodik@list.ru', '1b57598dfac193958b641f2c468742b3:LmJuPD7P8u8HuVayGlxQfgFwQmcHi359', 'Registered', 0, 0, 18, '2011-03-31 11:42:49', '0000-00-00 00:00:00', '', '');

  Ответить  
 
 автор: cheops   (27.04.2011 в 14:42)   письмо автору
 
   для: cheops   (27.04.2011 в 10:45)
 

Попробуйте следующий запрос (правильно ли я понимаю, что он не подхватывает данные из базы данных new?)
SELECT distinct 
  uchet.sessya.login AS login,  
  IFNULL(bd1.total, 0) AS totalbd1,  
  IFNULL(bd2.total, 0) AS totalbd2,  
  (IFNULL(bd1.total, 0) + IFNULL(bd2.total, 0)) AS totalitog, 
  new.jos_comprofiler.firstname, 
  new.jos_comprofiler.middlename, 
  new.jos_comprofiler.lastname, 
  new.jos_users.username 
FROM  
  uchet.sessya  
LEFT JOIN  
  (SELECT uchet.sessya.login, COUNT(uchet.sessya.id_otv) AS total  
   FROM uchet.sessya  
   WHERE uchet.sessya.bd='1' AND  
         uchet.sessya.result='Верно'  
   GROUP BY uchet.sessya.login) AS bd1  
USING(login)  
LEFT JOIN  
  (SELECT uchet.sessya.login, COUNT(uchet.sessya.id_otv) AS total  
   FROM uchet.sessya  
   WHERE uchet.sessya.bd='2' AND  
         uchet.sessya.result='Верно') AS bd2  
USING(login) 
LEFT JOIN  
  new.jos_users  
ON new.jos_users.id = uchet.sessya.login 
LEFT JOIN  
  new.jos_comprofiler  
ON  
 new.jos_comprofiler.user_id = new.jos_users.id 
ORDER BY uchet.sessya.login

  Ответить  
 
 автор: enodik   (27.04.2011 в 14:50)   письмо автору
 
   для: cheops   (27.04.2011 в 14:42)
 

да, поля с фамилией, именем и отчеством, логином пустые

  Ответить  
 
 автор: cheops   (27.04.2011 в 15:16)   письмо автору
 
   для: enodik   (27.04.2011 в 14:50)
 

Посмотрите следующий запрос
SELECT distinct  
  uchet.sessya.login AS login,   
  IFNULL(bd1.total, 0) AS totalbd1,   
  IFNULL(bd2.total, 0) AS totalbd2,   
  (IFNULL(bd1.total, 0) + IFNULL(bd2.total, 0)) AS totalitog,  
  cmp.firstname,  
  cmp.middlename,  
  cmp.lastname,  
  usr.username AS username
FROM   
  uchet.sessya   
LEFT JOIN   
  (SELECT uchet.sessya.login, COUNT(uchet.sessya.id_otv) AS total   
   FROM uchet.sessya   
   WHERE uchet.sessya.bd='1' AND   
         uchet.sessya.result='Верно'   
   GROUP BY uchet.sessya.login) AS bd1   
USING(login)   
LEFT JOIN   
  (SELECT uchet.sessya.login, COUNT(uchet.sessya.id_otv) AS total   
   FROM uchet.sessya   
   WHERE uchet.sessya.bd='2' AND   
         uchet.sessya.result='Верно') AS bd2   
USING(login)  
LEFT JOIN   
  new.jos_users AS usr 
USING(id)  
LEFT JOIN   
  new.jos_comprofiler AS cmp
USING(id)  
ORDER BY uchet.sessya.login

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования