gpt4 book ai didi

php - 使用 MySQL 对列的逗号分隔字符串进行排序

转载 作者:行者123 更新时间:2023-11-29 18:29:27 26 4
gpt4 key购买 nike

enter image description here再会!寻呼各位数据库工程师和高手,希望能引起你们的注意。

我目前正在开发我们的旅行推荐系统,但我们在 MYSQL 中的 ORDER BY LIKE SEPARATED COMMAS 方面遇到问题。

我有两个表:-tb_users(该表有一个“Traveler_Style”字段,其中包含已注册的旅行者类型。“Traveler_Style”的值基于他们的偏好。示例值是背包客、夜生活)

-attractions(该表有一个“traveler_style”字段,包括背包客、夜生活、豪华旅行者)

在我的搜索引擎中,当用户输入景点时,将根据 tb_users 上注册的“Traveler_Style”按喜欢排序,该“喜欢”或与表景点中的记录匹配。

我尝试声明一个变量来调用 tb_user Traveler 样式的值,即 $style_fetch,这是我选择查询的想法

$query6 = "SELECT * FROM `attractions` WHERE CONCAT(`categories`, `tourist_spot`, `province`) LIKE '%".$valueToSearch."%' ORDER BY FIELD(traveler_style, '$style_fetch') DESC limit 8";

预期输出应根据用户的旅行者风格按喜好排序

enter image description here

最佳答案

有很多方法可以做到这一点,以下是三种方法。

  1. 使用 MySQL 函数substring_index()。但您需要知道样式的数量。检查这个answer .

    substring_index(Traveler_Style,',',1) => 第一个值substring_index(substring_index(Traveler_Style,',',-2),',',1) => 第二个值substring_index(substring_index(Traveler_Style,',',-1),',',1) => 第三个值

类似这样的事情

SELECT SUBSTRING_INDEX(Traveler_Style,',',1) AS col1,
CONCAT(SUBSTRING_INDEX(Traveler_Style,',',1),
substring_index(substring_index(Traveler_Style,',',-2),',',1)) AS col2
FROM table
WHERE col1 LIKE '%text%' OR
col2 LIKE '%text%'
ORDER BY col1, col2
  • 分隔表格列。您可能需要在需要时创建更多列。不灵活。

  • 创建一个新表,以便它们可以容纳多种旅行者样式。然后,您连接表并进行查询。我更喜欢这种方法,因为它更灵活和可扩展性。

       attractionTable         styleTable
    +===================+ +===============+
    | id | tourist_spot | | id | style |
    +===================+ +===============+
    | 1 | Attraction1 | | 1 | Backpack |
    | 2 | Attraction2 | | 1 | Beach |
    | 3 | Attraction3 | | 2 | Beach |
    +===================+ | 2 | Relax |
    | 3 | Backpack |
    +===============+
  • 请注意,旅行者风格中不再有逗号。它们被分隔在不同的行中。

    在上面的示例中,Attraction1 有 2 个相关样式背包海滩景点2有2种相关风格海滩放松Attraction3 有 1 款背包

    连接两个表并按 LIKE 过滤

    SELECT tourist_spot, style FROM attractionTable, styleTable 
    WHERE attractionTable.id = styleTable.id
    AND style LIKE '%%'
    ORDER BY style

    +===============================+
    | id | tourist_spot | style |
    +===============================+
    | 1 | Attraction1 | Backpack |
    | 1 | Attraction1 | Beach |
    | 2 | Attraction2 | Beach |
    | 2 | Attraction2 | Relax |
    | 3 | Attraction3 | Backpack |
    +===============================+

    现在您需要做的就是过滤掉不同的风格。

    希望这会有所帮助。

    关于php - 使用 MySQL 对列的逗号分隔字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45835672/

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