为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL 搜索两张表,从第一张表返回结果

MySQL 搜索两张表,从第一张表返回结果

PHP
GCT1015 2023-04-21 13:16:04
我有两个表Products和Items。每个产品包含项目关系product_id产品表:| id    | name          ||----   |-----------    || 1     | Product 1     || 2     | Product 2     |项目表:| id    | product_id    | name      ||----   |------------   |--------   || 1     | 1             | Item 1    || 2     | 2             | Item 2    |所以我有搜索表产品的能力:SELECT * FROM products WHERE name LIKE '%product 1%'我想要实现的是如果有一个项目匹配返回它的父Product ,也可以在Items表上搜索的能力。所以如果我搜索项目 1并且它链接到产品 1然后product_id返回产品 1我试过了 :(SELECT * FROM products WHERE name LIKE '%product 1%') UNION (SELECT * FROM items WHERE name LIKE '%item 1%')当搜索关键字匹配时Product 1它返回产品,但如果搜索关键字是Item 1它返回item不是product,我希望在所有情况下只返回products。我怎样才能做到这一点?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

您可以将LEFT JOIN两个表相互关联product_id,然后在两个name字段中搜索以找到匹配项,如果匹配则返回产品名称。我们使用 aLEFT JOIN以便仍然可以搜索没有项目的产品。例如(搜索产品名称):


SELECT p.id, p.name

FROM products p

LEFT JOIN items i ON i.product_id = p.id

WHERE p.name LIKE '%Product 1%'

   OR i.name LIKE '%Product 1%'

输出:


id  name

1   Product 1

或搜索项目名称:


SELECT p.id, p.name

FROM products p

LEFT JOIN items i ON i.product_id = p.id

WHERE p.name LIKE '%Item 1%'

   OR i.name LIKE '%Item 1%'

输出:


id  name

1   Product 1


查看完整回答
反对 回复 2023-04-21
?
互换的青春

TA贡献1797条经验 获得超6个赞

您需要使用 JOIN 来联合。


SELECT *

FROM products

WHERE name LIKE '%search term%'


UNION


SELECT p.*

FROM products AS p

JOIN items AS i ON p.id = i.product_id

WHERE i.name LIKE '%search term%'


查看完整回答
反对 回复 2023-04-21
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我会用:


select p.*

from products p

where p.name LIKE '%search term%' or

      exists (select 1

              from items i

              where i.product_id = p.id and

                    i.name LIKE '%search term%'

             );

使用此公式,如果多个项目与产品匹配,您不必担心重复。


查看完整回答
反对 回复 2023-04-21
  • 3 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信