【问题标题】:Mysql concat and search on multiple tablesMysql concat和搜索多个表
【发布时间】:2013-05-09 10:27:24
【问题描述】:

我有 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 分组时,每个结果都显示不正确的可搜索字段。

任何帮助将不胜感激。

【问题讨论】:

标签: mysql concat


【解决方案1】:

有时关键是简化。下面将找到描述或类别与“%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

【讨论】:

  • 谢谢!这适用于获得我需要的结果。我通过这样做添加了第二个搜索:SELECT p.*, c.* 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%' ) and ( p.description LIKE '%flowers%' OR c.category LIKE '%flowers%' ) GROUP BY p.product_id;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多