Есть две таблицы. Таблица с этими товарами и таблица с брендами. Эти две таблицы связаны друг с другом через третью таблицу.
У вас один товар может иметь сразу несколько брендов?
Я так понимаю надо сделать таблицу соотношений, где два поля - id_товара и id_его аналога
Допустим у товара с ID 1 есть три аналога - получается на один товар три записи. А у этого аналога в аналогах - товар с ID 1 и оставшиеся два товара. Уже 6 записей. В общем что то мне такое решение не нравится.
В целом, это вполне нормальная практика, по крайней мере, с точки зрения логики. Например, "лампочка А", логически может быть заменена на "лампочка Б", но обратная замена может быть не целесообразной, по каким-то признакам. Так же, при таком раскладе Вы сможете сортировать вывод аналогов по степени "рекомендуемости" их применения, на каждый товар и так далее. Но, у этого подхода безусловно есть и недостатки, в частности, это избыточность данных, дополнительные телодвижения по добавлению аналогов в каждый товар, лишнее место на диске, раздувание БД и так далее.
Если же все товары между собой являются абсолютными аналогами друг-друга, есть альтернативный подход. Он заключается в том, что вы создаёте какую-то группу аналогов, например, в таблице
analog_groups, каждая запись в которой = 1 группа аналогов. Далее, Вы указываете в товаре, к какой группе аналогов он принадлежит, это можно делать как по ID группы, так и по её заголовку (или любому другому параметру, который Вы к ней добавите) или по параметру id_группы_аналогов у любого другого товара, который в эту группу уже входит.
Особенности такого подхода:
а) Отсутствие избыточности данных
б) Все товары в одной группе аналогов всегда будут аналогами для всех остальных товаров в этой же группе
в) Нам не нужно будет делать множество одинаковых телодвижений, постоянно перелинковыая аналоги товаров друг у друга
г) Экономиться место на диске и не раздувается БД
д) Мы не можем выставить сортировку или приоритеты вывода аналогов для каждого отдельно товара без жестких костылей