gpt4 book ai didi

php - 通过单个查询获取其余结果

转载 作者:可可西里 更新时间:2023-11-01 08:25:24 25 4
gpt4 key购买 nike

以前:选择 2 个问题

更改为:一个强相关的 SQL 问题。 (不想浪费赏金,因为我没有得到答案,而且我的赏金仍然开放!)

基本上,我有 2 个查询。一种是通用的,一种是基于搜索的。

一:得到一切(这里没有问题)

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 ) 返回 1 个包含搜索到的匹配品牌的字段,以及包含剩余品牌的另一个字段。 (理想的选择,但我不知道怎么做。通过调整将整个查询放入连接中似乎效率低下)

3 ) (似乎效率低下,我不喜欢它)从查询中获取找到的商店,运行一个新的查询来寻找与找到的商店相关的品牌,然后将结果与 php 结合。但是,这会增加一个额外的查询,效率是首要任务。

我遇到了一个问题,如果有人搜索 2 个品牌,并且有与这两个品牌匹配的商店,它只会显示 2 个品牌中的 1 个。 (我猜是第一击)。

如果您对最后一个查询有任何帮助,我们将不胜感激!

提前致谢!

编辑:更深入地了解搜索功能搜索功能搜索与所搜索品牌相关的商店。它应该显示与所述品牌相关的商店,但不限于仅返回搜索的品牌。

最佳答案

GROUP_CONCAT 忽略 NULL,因此您可以像这样创建一个匹配的 GROUP_CONCAT :

SELECT
store_info.storeID,
store_info.name,
store_info.address,
store_info.phone,
GROUP_CONCAT(brands.name) AS brands,
GROUP_CONCAT(
CASE WHEN brands.ID IN (" . implode(",", $brandIDs) . ")
THEN brands.name
ELSE NULL
END
) AS available_brands
FROM
stores
INNER JOIN store_info ON (stores.ID = store_info.storeID)
INNER JOIN store_brands ON (stores.ID = store_brands.store)
INNER JOIN brands ON (store_brands.brand = brands.id)
WHERE stores.city = $cityID
GROUP BY store_info.storeID
ORDER BY store_info.name

fiddle :http://sqlfiddle.com/#!9/83e576/1

关于php - 通过单个查询获取其余结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36524314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com