我有一张结构相似的桌子:
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与品牌名称连接起来?
发布于 2016-11-15 14:30:04
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可能是有益的,当一个产品,由于某种原因,没有匹配的品牌。在这种情况下,对品牌名称的搜索将失败,但针对产品名称的搜索可能仍然匹配。
发布于 2016-11-15 14:29:32
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发布于 2016-11-15 14:33:58
对于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 DESChttps://stackoverflow.com/questions/40612308
复制相似问题