0

我有 2 个表、产品和类别定义如下:

表:类别 - category_id,类别

表:产品 - product_id、category_id、item_no、description

我正在尝试将描述和类别连接到一个可搜索的字段中。当我执行以下操作时,它可以工作,但是代码很笨重:

SELECT *, concat(description, ' ',category) as searchable 
FROM products, categories 
where concat(description, ' ',category) like '%flowers%' 
and concat(description, ' ',category) like '%rainbow%' 
and products.category_id=categories.category_id order by products.category_id

所以我试图写一个这样的子查询:

SELECT *
FROM products, categories, 
(SELECT concat(description, ' ',category) as searchable 
FROM products, categories 
where products.category_id=categories.category_id 
group by product_id) as sub
where searchable like '%flowers%' and searchable like '%rainbow%' 
and products.category_id=categories.category_id order by products.category_id;

此查询为每个 product_id 返回多个不正确的结果,当我尝试按 product_id 分组时,每个结果都显示不正确的可搜索字段。

任何帮助,将不胜感激。

4

1 回答 1

0

有时关键是简化。下面将找到具有与“%rainbow%”匹配的描述或类别的产品。

通过将查询分成两个 LIKE 子句,我们还通过消除繁重的 CONCAT 操作来提高性能。

SELECT p.*
FROM products AS p 
LEFT JOIN categories AS c ON p.category_id = c.category_id 
WHERE p.description LIKE '%rainbow%'
    OR c.category LIKE '%rainbow%'
GROUP BY p.product_id
于 2013-05-15T01:04:10.273 回答