mysql - 根据品牌ID获取品牌名称

标签 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

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

示例:用户输入“Phone”,因此他找到了“Phone1”。

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

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

最佳答案

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

关于mysql - 根据品牌ID获取品牌名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40612308/

相关文章:

mysql - 在MySQL中添加两行不同的表

php - laravel 中有 4 个表的 ownsToMany

mysql - 是否离线更改表mysql?

mysql - 事务是否会增加数据库的开销?

php - 如何用 ENUM 值填充 <select>?

SQL 条件 JOIN(内部或外部)

php - "multiplying"MySql 记录有什么方法可以测试服务器上的大型数据库吗?

database - 是否可以将 Adob​​e Flash CS 连接到任何类型的数据库?

mysql - 如何在 Laravel 5.1 中编写这个(左连接,子查询)?

mysql - Codeigniter 数据库加入不接受值而不是列名