之前的问题:Select2问题
现在的问题:一个与SQL强相关的问题。(我不想浪费悬赏,因为我没有得到答案,我的悬赏仍然开放!)
基本上,我有两个查询。一个是通用的,另一个是基于搜索的。
第一个查询:获取所有内容(没有问题)
SELECT store_info.storeID, store_info.name, store_info.address, store_info.phone, GROUP_CONCAT(brands.name) AS brands
FROM store_info, brands, stores, store_brands
WHERE stores.city = $cityID
AND store_brands.store = stores.ID
AND brands.id = store_brands.brand
AND stores.ID = store_info.storeID
GROUP BY store_info.storeID
ORDER BY store_info.name
这个查询完全符合我的要求,它给出的商店品牌格式为
brand1,brand2,brand3,brand4,brand5
等等。现在,我还有一个搜索功能,可以根据品牌搜索商店。基本上是相同的查询,只需要进行一点小改动(这里有问题):SELECT store_info.storeID, store_info.name, store_info.address, store_info.phone, GROUP_CONCAT(brands.name) AS brands
FROM store_info, brands, stores, store_brands
WHERE stores.city = $cityID
AND store_brands.store = stores.ID
AND brands.ID = store_brands.brand
AND stores.ID = store_info.storeID
AND brands.ID IN (" . implode(",", $brandIDs) . ")
GROUP BY store_info.storeID
ORDER BY store_info.name
这个最后一个查询的问题是,我仍然希望它返回所有品牌。我只想稍后处理搜索的品牌。在我看来,我应该能够以多种方式做到这一点:
1) 在查询中返回所有品牌,并在 PHP 中遍历时操作这些品牌(我已经存储了搜索词,但不知道如何在不获取所有商店(这不是我想要的东西)的情况下完成此操作)
2) 返回一个字段与所搜索匹配的品牌,另一个字段则包含剩余品牌。(理想的选择,但我不知道如何实现。将整个查询放入连接中并进行微调似乎效率低下)
3) (效率低下且我不喜欢它)从查询中获取找到的商店,运行新的查询寻找与找到的商店相关的品牌,然后使用 PHP 将结果合并。但是,这会添加一个额外的查询,而效率是优先考虑的。
如果有人搜索两个品牌,并且存在与两者匹配的商店,则只会显示其中1个品牌。 (我猜测是第一个命中的)
非常感谢您对此最后一个查询的帮助!
提前致谢!
编辑:对搜索功能的更多深入了解 搜索功能搜索与搜索的品牌相关的商店。它应该显示连接到这些品牌的商店,但不仅限于返回只搜索过的品牌。