根据品牌ID获取品牌名称

时间:2016-11-15 14:27:05

标签: mysql database join

我有一张结构相似的表:

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

我需要的是用户还可以使用品牌名称进行搜索。

示例:用户写"电话",所以他找到" Phone1"。

示例2:用户正在寻找" CerealEaters"品牌,所以结果显示"谷物" (id 25)以及" CerealEaters"。

当用户在"产品中搜索时,如何将该品牌ID与品牌名称相关联?表

3 个答案:

答案 0 :(得分:3)

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可能会有所帮助。在这种情况下,针对品牌名称的搜索将失败,但针对产品名称的搜索可能仍会匹配。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的预期查询低于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