Запрос по двум полям
Добрый день!
Скажу сразу, дальше будет то еще извращение, но что поделать работа такая… Есть таблица с товарами, меня интересует столбец название товара (name_product), и есть таблица с характеристиками товара (feature), простой пример: товар «Кирпич», характеристики «красный»,«желтый», «опт» и т.д.
Необходимо написать поиск по этому делу… с возможностью релевантности, т.е. если запросили кирпич красный то он должен выдать кирпич с характеристикой первыми…
У меня одна только мысль, денормализировать все в одну таблицу и в ней искать, но тут возникает сомнение, если товар 100, а характеристик 100000 и нашли только в одном товаре, то зачем перебирать все характеристики. Может можно как то в запросе сначала искать по товару, если в нем нашлось то выдавать, если нет то искать везде.
Придумал что то типа этого (но не знаю с точки зрения ресурсов):
SELECT CONCAT( `t1`.`name_goods`, IF( `t2`.`feature` != "", CONCAT( " ", `t2`.`feature` ), "" ) ) AS `name_goods`,
MATCH (
`name_goods`
)
AGAINST (
«кирпич утолщенный облицовочный пустотелый»
) AS relevance
FROM `im_goods` AS `t1`
INNER JOIN `im_records` AS `t2` ON `t2`.`id_goods` = `t1`.`id_goods`
WHERE `name_goods` LIKE "%кирпич%утолщенный%"
ORDER BY `relevance` DESC, `name_goods`
Скажу сразу, дальше будет то еще извращение, но что поделать работа такая… Есть таблица с товарами, меня интересует столбец название товара (name_product), и есть таблица с характеристиками товара (feature), простой пример: товар «Кирпич», характеристики «красный»,«желтый», «опт» и т.д.
Необходимо написать поиск по этому делу… с возможностью релевантности, т.е. если запросили кирпич красный то он должен выдать кирпич с характеристикой первыми…
У меня одна только мысль, денормализировать все в одну таблицу и в ней искать, но тут возникает сомнение, если товар 100, а характеристик 100000 и нашли только в одном товаре, то зачем перебирать все характеристики. Может можно как то в запросе сначала искать по товару, если в нем нашлось то выдавать, если нет то искать везде.
Придумал что то типа этого (но не знаю с точки зрения ресурсов):
SELECT CONCAT( `t1`.`name_goods`, IF( `t2`.`feature` != "", CONCAT( " ", `t2`.`feature` ), "" ) ) AS `name_goods`,
MATCH (
`name_goods`
)
AGAINST (
«кирпич утолщенный облицовочный пустотелый»
) AS relevance
FROM `im_goods` AS `t1`
INNER JOIN `im_records` AS `t2` ON `t2`.`id_goods` = `t1`.`id_goods`
WHERE `name_goods` LIKE "%кирпич%утолщенный%"
ORDER BY `relevance` DESC, `name_goods`