gpt4 book ai didi

php - 搜索 3 个表及其相关表的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-29 13:29:00 25 4
gpt4 key购买 nike

我有三个表:

  • 商店(链接到地址和类别表)
  • 品牌(链接到类别表)
  • 购物中心(链接至地址)

enter image description here

当我搜索 ac 时,我需要搜索每个表并获取以 ac 开头的所有行。

我还需要获取

  • 每家商店的地址和类别
  • 每个购物中心的地址
  • 每个品牌的类别

我的搜索使用自动完成功能,但我不想一大块地显示结果,而是将结果分为商店、品牌和购物中心。

我当前的解决方案是执行3个单独的SQL查询,并将结果放入ann数组中并返回。

但我不认为以这种方式进行查询是最有效的方法。有没有更好的方法来提高搜索速度?复杂搜索有最佳实践吗?

我正在为姓名和地址等内容建立索引。

目前我只能使用MySQL DB。

最佳答案

在不知道您确切的表结构的情况下,我会提出与此类似的建议:

SELECT
stores.name AS name,
addresses.street AS street,
addresses.city AS city,
'store' AS type,
GROUP_CONCAT(categories.categoryname) AS category
FROM
stores
INNER JOIN
addresses ON addresses.addressid = stores.storeid
INNER JOIN
categories AS categories.storeid = stores.storeid
WHERE
stores.name LIKE "ac%"
GROUP BY
stores.storeid
UNION
SELECT
brands.name AS name,
'-' AS street,
'-' AS city,
'brand' AS type,
GROUP_CONCAT(brandcategories.categoryname) AS category
FROM
brands
INNER JOIN
brandcategories AS brandcategories.brandid = brands.brandid
WHERE
brands.name LIKE "ac%"
GROUP BY
brands.brandsid
UNION
SELECT
malls.name AS name,
addresses.street AS street,
addresses.city AS city,
'mall' AS type,
'-' AS category
FROM
malls
INNER JOIN
addresses ON addresses.addressid = malls.mallid
WHERE
malls.name LIKE "ac%"
GROUP BY
malls.mallid

对每个表执行SELECT...并对它们进行UNION。每个 SELECT 都有一个列 type,其中 type 可以是商店、品牌或购物中心。因此您可以稍后在 PHP 代码中区分它。

由于 UNION 中的每个 SELECT 都需要相同的列,因此例如品牌返回一个地址,但它是空的。

在此示例中,每个商店/品牌可以有多个类别,这些类别会在逗号分隔字段中立即返回 (GROUP_CONCAT(categories.categoryname))。

关于php - 搜索 3 个表及其相关表的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746394/

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