使用MySQL命令用逗号分隔列的字符串

时间:2017-08-23 09:22:29

标签: php mysql

enter image description here美好的一天!对所有数据库工程师和主人进行分析可能会引起您的注意。

我目前正在开发我们的旅行推荐系统,我们遇到了在MYSQL中按顺序分离订单的问题。

我有两张桌子: -tb_users(这个表有一个“Traveler_Style”字段,其中包含了他们所属旅行者的注册风格。“Traveler_Style”的值基于他们的偏好。这个样本值是背包客,夜生活)

-attractions(此表有一个“traveler_style”字段,包括Backpacker,Nightlife,luxurytraveler)

在我的搜索引擎中,当用户输入一个景点时,将根据tb_users上注册的“Traveler_Style”进行ORDER BY LIKE,它将“喜欢”或匹配表格景点中的记录。

我试图声明一个变量来调用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 个答案:

答案 0 :(得分:0)

有很多方法可以做到,这里有三种方法。

  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)=>第三个值

  2. 像这样的东西

    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
    
    1. 分隔表格列 。您可能需要在需要时创建更多列。不灵活。

    2. 创建新表格 ,以便他们可以容纳多种旅行者样式。然后,您加入表并进行查询。我更喜欢这种方法,因为它更灵活,更具可扩展性。

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

      在上面的例子中, 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 |
          +===============================+
      

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

      希望这可能会有所帮助。