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";
预期输出应根据用户的旅行者风格顺序排序
答案 0 :(得分:0)
有很多方法可以做到,这里有三种方法。
使用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 |
+===============================+
现在您需要做的就是过滤掉不同的风格。
希望这可能会有所帮助。