Есть задумка выводить в блок похожих, товары по принципу наибольшего совпадения по характеристикам.
С точки зрения mysql имеются 2 таблицы, в первой лежат "товары" во второй характеристики в виде
id, id_tovar, name, value
Где:
id - уникальный id записи
id_tovar - id записи из таблицы товара
name - Наименование характеристики (например длинна, цвет и т.п.)
value - значение характеристики (например 1метр, красный и т.п.)
Характеристик у товара может быть произвольное количество. В среднем от 5 до 15. По сути требуется отсортировать товары по максимальному совпадению харрактеристик. Сначала идут с полным совпадением, потом совпадающие по -1 свойству и так далее.
На просторах интернета был обнаружен совет:
Вам помогут CROS JOIN и функция IF(). Суть такова: вы получаете декартово произведение двух таблиц, для каждой строки вычисляете количество совпадающих полей и сортируете по количеству совпадений.
select p2.id,
if(p1.width = p2.width, 1, 0) +
if(p1.height = p2.height, 1, 0) +
if(p1.color = p2.color, 1, 0) +
if(p1.education = p2.education, 1, 0) as matching_fields
from profile1 p1
cross join profile2 p2
where p1.id = 6
order by matching_fields desc;
sqlfiddle.com/#!2/417c25c/9
Подскажите, где посмотреть реализации подобного или почитать теорию по решению этой задачи.