Здравствуйте уважаемые (и не очень) гики.
Очень давно мучил вопрос касаемо следующей ситуации:
Имеются три вымышленные таблицы:
1.
Таблица объявленийCREATE TABLE `ads` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NULL DEFAULT NULL,
`cat_id` INT(11) NULL DEFAULT '0',
`city_id` INT(11) NULL DEFAULT NULL,
`phone` VARCHAR(100) NOT NULL,
`title` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`),
INDEX `user_id` (`user_id`),
INDEX `cat_id` (`cat_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=0;
2.
Таблица мета полей для объявленийCREATE TABLE `ads_meta` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`ads_id` INT(11) NOT NULL,
`name` VARCHAR(50) NOT NULL,
`integer` INT(20) NOT NULL,
`varchar` VARCHAR(100) NOT NULL,
`text` TEXT NOT NULL,
`longtext` LONGTEXT NOT NULL,
PRIMARY KEY (`id`),
INDEX `ads_id` (`ads_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0;
3.
Таблица с путями к изображениямCREATE TABLE `ads_images` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NOT NULL DEFAULT '0',
`ads_id` INT(11) NOT NULL,
`path` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`),
INDEX `ads_id` (`ads_id`),
INDEX `user_id` (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0;
Внимание вопрос
Какие образом выбрать объявления, забрав мета данные и изображения минимальным количеством запросов?
Изображений может быть много, как и мета данных к одному объявлению.
Пытался через GROUP_CONCAT(), но там ограничение на 1024 символа.
Пытался получать в цикле, но там количество запросов увеличивается пропорционально количеству запрошенных данных.
Использовать JOIN
= выборка только один к одному, т.е. получается одна строка с объявлением, одна из мета данных, и одна из изображений.
Пока только решение в три запроса:
1. Выбрать объявления
2. Выбрать мета поля, исходя из идентификаторов объявлений используя
IN
3. Выбрать изображения аналогичным запросом с
INВсех заранее благодарю за развернутые ответы.