SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 21.07.2015 20:06:42

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Подскажите с реализайцией выборки из БД

Доброго времени суток!

Подскажите пожалуйста с реализацией выборки записей из БД так что бы выбирать и категории в которых они находятся. Одна и та же записиь может находится одновременно в нескольких категориях many to many (на сколько я понял)


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

CREATE TABLE IF NOT EXISTS `catalog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `visible` tinyint(1) NOT NULL DEFAULT '1',
  `parent_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `position` int(11) unsigned NOT NULL DEFAULT '0',
  `slug` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=551 ;

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

INSERT INTO `catalog` (`id`, `name`, `visible`, `parent_id`, `position`, `slug`) VALUES
(1, 'Строительство', 1, 0, 1, 'stroitelstvo_stroimaterialy'),
(2, 'Деловые услуги', 1, 0, 2, 'delovye_uslugi'),
(3, 'Бытовые услуги и досуг', 1, 1, 3, 'bytovye_uslugi_dosug_turizm'),
(4, 'Транспорт и услуги', 1, 1, 4, 'transport_i_uslugi'),
(5, 'Дом, офис, зоотовары', 1, 0, 5, 'bytovye_tovary_elektronika_tovary_dlya_ofisa'),
(6, 'Одежда, обувь, белье, ткани, ковры', 1, 0, 6, 'odezhda_obuv_bele_tkani_kovry'),
(7, 'Общественное питание', 1, 0, 7, 'magaziny_predpriyatiya_torgovli_i_pitaniya'),
(8, 'Мебель', 1, 0, 8, 'mebel');

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

CREATE TABLE IF NOT EXISTS `articles` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `visible` tinyint(1) NOT NULL DEFAULT '1',
  `number` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `number` (`number`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;

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

INSERT INTO `articles` (`id`, `name`, `visible`, `number`) VALUES
(16, 'default 1', 0, 48009);
INSERT INTO `articles` (`id`, `name`, `visible`, `number`) VALUES
(17, 'default 2', 0, 48010);
INSERT INTO `articles` (`id`, `name`, `visible`, `number`) VALUES
(18, 'default 3', 0, 48011);

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

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

CREATE TABLE IF NOT EXISTS `many_many` (
  `catalogID` int(11) unsigned NOT NULL,
  `articleID` int(11) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

INSERT INTO `many_many` (`catalogID`, `articleID`) VALUES
(3, 16),
(3, 17);
(4, 16);
(4, 17);
(4, 18);
-- --------------------------------------------------------
 


Собственно подскажите пожалуйста как мне выбрать все записи из БД и имена категорий в которых они хранятся? Что бы под каждой записью можно было вывести Категория: Бытовые услуги и досуг, Транспорт и услуги (например)

Отредактированно saylar_06 (21.07.2015 20:09:20)

Неактивен

 

#2 22.07.2015 08:10:57

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Re: Подскажите с реализайцией выборки из БД

UP!

Помочь совсем не кому?
Пока что приходит в голову две мысли:
1) первым запросом вытащить все записи, вторым запросом вытащить категории этих записей и программно соединить в один массив
2) одним запросом вытащить все записи, и при выводе записей на странице каждый раз обращаться к БД и получать её категории, т.е если на страницу выводится 50 записей то это будет 50 запросов к БД(

Есть другие варианты?

Неактивен

 

#3 22.07.2015 13:18:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите с реализайцией выборки из БД

SELECT a.name, c.name
FROM articles a JOIN many_many ON a.id=articleID JOIN catalog c ON c.id=catalogID;


или

SELECT a.name, group_concat(c.name)
FROM articles a JOIN many_many ON a.id=articleID JOIN catalog c ON c.id=catalogID
GROUP BY 1;

Неактивен

 

#4 22.07.2015 16:41:30

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Re: Подскажите с реализайцией выборки из БД

Спасибо, это как раз то что было нужно! не знал про GROUP_CONCAT(), в качестве разделителя использовал произвольный символ

Неактивен

 

Board footer

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