Что делать если две ссылки на одну таблицу, можно ли сделать два JOIN?



Что делать если две ссылки на одну таблицу, можно ли сделать два 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 в таком случае должен отрабатывать корректно. И как уже было сказано выше, не забудьте правильно расставить индексы)

Комментарии