Что делать если две ссылки на одну таблицу, можно ли сделать два JOIN?
Да, такое вполне приемлемо, как я понимаю в Вашем случае один товар может иметь несколько атрибутов хранящихся в одной таблице, приходится конечно же джойнить ее несколько раз что бы получить строку с товаром и всеми атрибутами. Для примера: таблица с атрибутами:
CREATE TABLE `attr` (
`id` INT AUTO_INCREMENT,
`name` CHAR,
`type` CHAR,
PRIMARY KEY (`id`)
)
таблица с товарами:
CREATE TABLE `goods` (
`id` INT AUTO_INCREMENT,
`name` CHAR,
`attr_1_id` INT,
`attr_2_id` INT,
PRIMARY KEY (`id`),
KEY `attr_1_id` (`attr_1_id`),
KEY `attr_2_id` (`attr_2_id`),
)
запрос будет выглядеть следующим образом:
SELECT
*
FROM
`goods` as `g`
LEFT JOIN
`attr` as `a1` ON (`a1`.`id` = `g`.`attr_1_id`)
LEFT JOIN
`attr` as `a2` ON (`a2`.`id` = `g`.`attr_2_id`)
Таким образом для одного товара Вы имеете одну запись в таблице товаров и две записи в таблице аттрибутов, но в рузультирующей выборке получаете одну строку для каждого товара и LIMIT в таком случае должен отрабатывать корректно. И как уже было сказано выше, не забудьте правильно расставить индексы)
Комментарии
Отправить комментарий