Как сделать выборку по максимальному совпадению полей?
А что вам нужно посмотреть-то? В запросе принцип работы показан же, если есть совпадение, то увеличиваем вес на 1 иначе на 0 и в конечном счете сортируем по сумме веса.
Если хотите про JOIN-ы прочесть, то - potapov.com.ua/library/21 , или еще лучше:
В таких вещах я бы сначала подумал что я экономлю - место, запросы или процессор.
Возможно идея плохая, но я бы заранее считал похожесть параметров в процентах например (или каком-то другом обобщённом показателе) и хранил бы это значение в отдельном поле.
Ещё я бы заранее определил что такое похожие товары - какие критерии похожести? (цвет, например, на мой взгляд в этом параметре не должен участвовать). Можно отдать выбор посетителю типа: найти похожие телевизоры по размеру или найти похожие по функционалу.
Можно запрашивать все параметры товара и если 80% параметров или больше одинаковы - товары похожи.
Если параметры числовые, можно для телевизора с диагональю 100 см. искать в базе телевизоры с диагональю от 95 до 105 см, т.е. +- 10%
Есть ещё такая идея: каждому товару заранее присвоить похожие и при выводе на экран просто выводить из этого поля. Похожие товары пересчитывать один раз при добавлении, обновлении ассортимента или раз в неделю по крону. В этом случае хорошо то что системных ресурсов и запросов на такой скрипт можно не жалеть.