[英]Order comma separated strings of a column using MySQL
在這里輸入圖片說明 ! 對所有數據庫工程師和母版進行分頁的過程可能需要一段時間。
我目前正在開發旅行推薦系統,而MYSQL中的ORDER BY LIKE分隔逗號存在問題。
我有兩個表:-tb_users(該表具有“ Traveler_Style”字段,其中包含他們是哪種旅行者的注冊樣式。“ Traveler_Style”的值取決於他們的偏好。示例值是Backpacker,夜生活)
-attractions(此表的字段為“ traveler_style”,包括背包客,夜生活,luxurytraveler)
在我的搜索引擎中,當用戶輸入景點時,將基於tb_users上已注冊的“ Traveler_Style”來按“喜歡”排序,該“喜歡”或與表景點中的記錄匹配。
我試圖聲明一個變量來調用tb_user Traveler style的值,即$ style_fetch,這是我選擇查詢的想法
$query6 = "SELECT * FROM `attractions` WHERE CONCAT(`categories`, `tourist_spot`, `province`) LIKE '%".$valueToSearch."%' ORDER BY FIELD(traveler_style, '$style_fetch') DESC limit 8";
預期的輸出應基於用戶的旅行者風格進行排序
這樣做的方法很多,下面是三種方法。
使用MySQL函數substring_index() 。 但是您將需要知道樣式的數量。 檢查此答案 。
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個相關樣式Backpack和Beach 。 Attraction2有2個相關的樣式Beach和Relax 。 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 |
+===============================+
現在,您需要做的就是過濾掉不同的樣式。
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.