【问题标题】:Get name of brand based on brand ID根据品牌 ID 获取品​​牌名称
【发布时间】:2016-11-15 14:27:04
【问题描述】:

我有一张结构相似的表:

ID  |  NAME      |  BRAND_ID
--------------------------------
22  | Phone1     |  2
25  | Cereal     |  9
33  | Cereal     |  4
39  | Water      |  3

我还有一个品牌的桌子:

ID  |  NAME
--------------------
2   |  PhoneMaker
9   |  CerealEaters
3   |  WaterDoers

当用户进行搜索时,我执行此查询并显示结果

SELECT * FROM `products`
WHERE `name` COLLATE UTF8_UNICODE_CI LIKE '%$user_search%'
ORDER BY `id` DESC

我需要的是用户能够使用品牌名称搜索 ALSO

示例:用户写“Phone”,所以他找到“Phone1”。

示例 2:用户正在寻找“CerealEaters”品牌,因此结果显示“Cereal”(id 25)和“CerealEaters”。

当用户在“产品”表中搜索时,如何将该品牌 ID 与品牌名称联系起来?

【问题讨论】:

  • 为什么不使用简单的连接查询?

标签: mysql database join


【解决方案1】:
SELECT *
FROM products p
LEFT JOIN brands b
    ON p.BRAND_ID = b.ID
WHERE p.name COLLATE UTF8_UNICODE_CI LIKE '%$user_search%' OR
      b.name COLLATE UTF8_UNICODE_CI LIKE '%$user_search%'
ORDER BY p.id DESC

在产品由于某种原因没有匹配品牌的情况下,在此处使用 LEFT JOIN 可能会有所帮助。在这种情况下,针对品牌名称的搜索会失败,但针对产品名称的搜索可能仍然匹配。

【讨论】:

    【解决方案2】:
    SELECT * FROM `products`
    LEFT JOIN `brands` ON `products`.`brand_id` = `brands`.`id`
    WHERE `products`.`name` COLLATE UTF8_UNICODE_CI LIKE '%$user_search%'
       OR `brands`.`name` COLLATE UTF8_UNICODE_CI LIKE '%$user_search%'
    ORDER BY `products`.`id` DESC
    

    【讨论】:

      【解决方案3】:

      您的预期查询如下LEFT JOIN

      SELECT * FROM products a left join brands b on a.BRAND_ID =  b.ID 
      WHERE a.NAME COLLATE UTF8_UNICODE_CI like '%$user_search%' 
      or b.NAME COLLATE UTF8_UNICODE_CI like '%$user_search%'
      ORDER BY a.ID DESC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 2015-07-14
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        相关资源
        最近更新 更多