[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужно подправить запрос SQL
Kuliev
Есть 6 таблиц

2 - таблицы это справочники

4 - таблицы куда пишутся данные.

все таблицы связанны между собой
Дамп таблиц




--
-- Table structure for table `kas_anketa_junior`
--

CREATE TABLE IF NOT EXISTS `kas_anketa_junior` (
`id_anketa_junior` int(11) NOT NULL AUTO_INCREMENT,
`fio` text NOT NULL,
`hday` text NOT NULL,
`class` text NOT NULL,
`addres` text NOT NULL,
`h_phone` text NOT NULL,
`m_phone` varchar(12) NOT NULL,
`m_phone_rod` varchar(12) NOT NULL,
`ucheba` text NOT NULL,
`school` text NOT NULL,
`email` text NOT NULL,
`anketa` text NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id_anketa_junior`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;


--
-- Table structure for table `kas_departament`
--

CREATE TABLE IF NOT EXISTS `kas_departament` (
`id_departament` int(11) NOT NULL AUTO_INCREMENT,
`departament` text NOT NULL,
PRIMARY KEY (`id_departament`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `kas_departament`
--

INSERT INTO `kas_departament` (`id_departament`, `departament`) VALUES
(1, 'Юбилейная 40, гостиница ВЕГА'),
(2, 'Татищева 6, 19 квартал'),
(3, 'Комсомольский р-н, Ярославская 9');

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

--
-- Table structure for table `kas_reklama`
--

CREATE TABLE IF NOT EXISTS `kas_reklama` (
`id_reklama` int(11) NOT NULL AUTO_INCREMENT,
`reklama` text NOT NULL,
PRIMARY KEY (`id_reklama`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

--
-- Dumping data for table `kas_reklama`
--

INSERT INTO `kas_reklama` (`id_reklama`, `reklama`) VALUES
(1, 'Газеты'),
(2, 'Журналы'),
(3, 'Наружняя реклама'),
(4, 'Радио/телевидение'),
(5, 'Интернет'),
(6, 'Рекомендации знакомых');

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

--
-- Table structure for table `kas_reklama_data`
--

CREATE TABLE IF NOT EXISTS `kas_reklama_data` (
`id_reklama_data` int(11) NOT NULL AUTO_INCREMENT,
`reklama` int(1) NOT NULL,
`id_junior` int(11) NOT NULL,
`id_big` int(11) NOT NULL,
PRIMARY KEY (`id_reklama_data`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `kas_reklama_data`
--

INSERT INTO `kas_reklama_data` (`id_reklama_data`, `reklama`, `id_junior`, `id_big`) VALUES
(1, 1, 1, 0),
(2, 5, 1, 0),
(3, 3, 2, 0),
(4, 4, 2, 0);

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

--
-- Table structure for table `kas_week`
--

CREATE TABLE IF NOT EXISTS `kas_week` (
`id_week` int(11) NOT NULL AUTO_INCREMENT,
`week_small` text NOT NULL,
`week_big` text NOT NULL,
PRIMARY KEY (`id_week`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;

--
-- Dumping data for table `kas_week`
--

INSERT INTO `kas_week` (`id_week`, `week_small`, `week_big`) VALUES
(1, 'Пн.', 'Понедельник'),
(2, 'Вт.', 'Вторник'),
(3, 'Ср.', 'Среда'),
(4, 'Чт.', 'Четверг'),
(5, 'Пт.', 'Пятница'),
(6, 'Сб.', 'Суббота'),
(7, 'Вс.', 'Воскресенье');

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

--
-- Table structure for table `kas_week_data`
--

CREATE TABLE IF NOT EXISTS `kas_week_data` (
`id_week_data` int(11) NOT NULL AUTO_INCREMENT,
`week` int(1) NOT NULL,
`id_junior` int(11) NOT NULL,
`id_big` int(11) NOT NULL,
PRIMARY KEY (`id_week_data`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

--
-- Dumping data for table `kas_week_data`
--

INSERT INTO `kas_week_data` (`id_week_data`, `week`, `id_junior`, `id_big`) VALUES
(1, 1, 1, 0),
(2, 3, 1, 0),
(3, 5, 1, 0),
(4, 2, 2, 0),
(5, 3, 2, 0),
(6, 4, 2, 0);




Так вот, нужно вытянуть все данные в одну таблицу, но почемуто при выборке мускул выводит польше строк чем должно быть на самом деле
Подсведка ключей таблиц, кто с чем связан

--
-- Table structure for table `kas_anketa_junior`
--

CREATE TABLE IF NOT EXISTS `kas_anketa_junior` (
`id_anketa_junior` int(11) NOT NULL AUTO_INCREMENT,
`fio` text NOT NULL,
`hday` text NOT NULL,
`class` text NOT NULL,
`addres` text NOT NULL,
`h_phone` text NOT NULL,
`m_phone` varchar(12) NOT NULL,
`m_phone_rod` varchar(12) NOT NULL,
`ucheba` text NOT NULL,
`school` text NOT NULL,
`email` text NOT NULL,
`anketa` text NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id_anketa_junior`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;


--
-- Table structure for table `kas_departament`
--

CREATE TABLE IF NOT EXISTS `kas_departament` (
`id_departament` int(11) NOT NULL AUTO_INCREMENT,
`departament` text NOT NULL,
PRIMARY KEY (`id_departament`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `kas_departament`
--

INSERT INTO `kas_departament` (`id_departament`, `departament`) VALUES
(1, 'Юбилейная 40, гостиница ВЕГА'),
(2, 'Татищева 6, 19 квартал'),
(3, 'Комсомольский р-н, Ярославская 9');

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

--
-- Table structure for table `kas_reklama`
--

CREATE TABLE IF NOT EXISTS `kas_reklama` (
`id_reklama` int(11) NOT NULL AUTO_INCREMENT,
`reklama` text NOT NULL,
PRIMARY KEY (`id_reklama`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

--
-- Dumping data for table `kas_reklama`
--

INSERT INTO `kas_reklama` (`id_reklama`, `reklama`) VALUES
(1, 'Газеты'),
(2, 'Журналы'),
(3, 'Наружняя реклама'),
(4, 'Радио/телевидение'),
(5, 'Интернет'),
(6, 'Рекомендации знакомых');

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

--
-- Table structure for table `kas_reklama_data`
--

CREATE TABLE IF NOT EXISTS `kas_reklama_data` (
`id_reklama_data` int(11) NOT NULL AUTO_INCREMENT,
`reklama` int(1) NOT NULL,
`id_junior` int(11) NOT NULL,
`id_big` int(11) NOT NULL,
PRIMARY KEY (`id_reklama_data`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `kas_reklama_data`
--

INSERT INTO `kas_reklama_data` (`id_reklama_data`, `reklama`, `id_junior`, `id_big`) VALUES
(1, 1, 1, 0),
(2, 5, 1, 0),
(3, 3, 2, 0),
(4, 4, 2, 0);

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

--
-- Table structure for table `kas_week`
--

CREATE TABLE IF NOT EXISTS `kas_week` (
`id_week` int(11) NOT NULL AUTO_INCREMENT,
`week_small` text NOT NULL,
`week_big` text NOT NULL,
PRIMARY KEY (`id_week`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;

--
-- Dumping data for table `kas_week`
--

INSERT INTO `kas_week` (`id_week`, `week_small`, `week_big`) VALUES
(1, 'Пн.', 'Понедельник'),
(2, 'Вт.', 'Вторник'),
(3, 'Ср.', 'Среда'),
(4, 'Чт.', 'Четверг'),
(5, 'Пт.', 'Пятница'),
(6, 'Сб.', 'Суббота'),
(7, 'Вс.', 'Воскресенье');

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

--
-- Table structure for table `kas_week_data`
--

CREATE TABLE IF NOT EXISTS `kas_week_data` (
`id_week_data` int(11) NOT NULL AUTO_INCREMENT,
`week` int(1) NOT NULL,
`id_junior` int(11) NOT NULL,
`id_big` int(11) NOT NULL,
PRIMARY KEY (`id_week_data`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

--
-- Dumping data for table `kas_week_data`
--

INSERT INTO `kas_week_data` (`id_week_data`, `week`, `id_junior`, `id_big`) VALUES
(1, 1, 1, 0),
(2, 3, 1, 0),
(3, 5, 1, 0),
(4, 2, 2, 0),
(5, 3, 2, 0),
(6, 4, 2, 0);


Собственно мой запрос к БД.

SELECT *
FROM `kas_anketa_junior` AS `j`
LEFT JOIN `kas_departament` AS `d` ON `j`.`school` = `d`.`id_departament`
LEFT JOIN `kas_week_data` AS `dw` ON `j`.`id_anketa_junior` = `dw`.`id_junior`
LEFT JOIN `kas_week` AS `w` ON `w`.`id_week` = `dw`.`week`
LEFT JOIN `kas_reklama_data` AS `dr` ON `j`.`id_anketa_junior` = `dr`.`id_junior`
LEFT JOIN `kas_reklama` AS `r` ON `r`.`id_reklama` = `dr`.`reklama`
WHERE `j`.`id_anketa_junior` = 2




Спустя 2 часа, 26 минут, 44 секунды (24.07.2012 - 19:57) vagrand написал(а):
Смените LEFT JOIN на INNER JOIN

Спустя 22 минуты, 40 секунд (24.07.2012 - 20:20) Kuliev написал(а):
Цитата (vagrand @ 24.07.2012 - 20:57)
Смените LEFT JOIN на INNER JOIN

Спасибо, но результат один и тодже....

Спустя 27 минут, 49 секунд (24.07.2012 - 20:47) vagrand написал(а):
Цитата
Спасибо, но результат один и тодже....


Не может такого быть, запрос выведет ровно столько строк сколько удовлетворяют условию `j`.`id_anketa_junior` = 2 и ни одной больше

Спустя 1 час, 1 минута, 41 секунда (24.07.2012 - 21:49) Placido написал(а):
Может, выводится много лишних полей, а не строк?

Спустя 34 минуты, 45 секунд (24.07.2012 - 22:24) inpost написал(а):
либо разбей запросы - будет в х раз быстрее.
А если данный запрос подправить - используй группировку. Лефт джоин - к одному родителю множество дочерей подгружает удовлетворяя запрос. Чтобы дочерний был лишь один - группировку по полю, по которому присоединяешь. Не дома, поэтому код набрать не могу. Единственная проблема в том, что у тебя много таблиц, одна из которых может помешать группировке, но не факт. Так вот, отдельеые запросы будут и быстрее и сможешь указать лимит 1, чем и добьешься большей эффективности!

Спустя 2 минуты, 52 секунды (24.07.2012 - 22:27) Kuliev написал(а):
Цитата (Placido @ 24.07.2012 - 22:49)
Может, выводится много лишних полей, а не строк?

Давай разберём что такое строки и что такое поля.

| NAME| -> Вот это поле!
-------------------
Вася
Петя
Даша
Маша
-----------------------
А вот это строки данного поля.

Исходя из этого можно сделать вывод, что полей больше быть НЕ МОЖЕТ.

Спустя 2 минуты, 30 секунд (24.07.2012 - 22:29) Kuliev написал(а):
Цитата (inpost @ 24.07.2012 - 23:24)
либо разбей запросы - будет в х раз быстрее.
А если данный запрос подправить - используй группировку. Лефт джоин - к одному родителю множество дочерей подгружает удовлетворяя запрос. Чтобы дочерний был лишь один - группировку по полю, по которому присоединяешь. Не дома, поэтому код набрать не могу. Единственная проблема в том, что у тебя много таблиц, одна из которых может помешать группировке, но не факт. Так вот, отдельеые запросы будут и быстрее и сможешь указать лимит 1, чем и добьешься большей эффективности!

Спасибо за совет...

Нужно выспаться и посмотреть со свежей головой. Как только присоединяю 4 таблицу так вся красота съезжает.

Спустя 9 минут, 42 секунды (24.07.2012 - 22:39) Placido написал(а):
Цитата (Kuliev @ 24.07.2012 - 22:27)
| NAME| -> Вот это поле!

Для меня это очевидно. Просто после твоего предыдущего вопроса по регулярке (элементарного) с комментарием "Регулярка не моя! Нашол в инете", хотел убедиться, что ты понимаешь, о чем спрашиваешь.

Спустя 8 часов, 51 минута, 26 секунд (25.07.2012 - 07:30) Kuliev написал(а):
Цитата (Placido @ 24.07.2012 - 23:39)
Цитата (Kuliev @ 24.07.2012 - 22:27)
| NAME| -> Вот это поле!

Для меня это очевидно. Просто после твоего предыдущего вопроса по регулярке (элементарного) с комментарием "Регулярка не моя! Нашол в инете", хотел убедиться, что ты понимаешь, о чем спрашиваешь.

Ну так я там же писал, что в регулярках не силен, что я ее нашел в инете. Вот я и обратился к знающим людям.
Ничего зазорного в этом нет.
А Вы, такое чувство решили постебаться надомной!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.