亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 172 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號