簡體   English   中英

使用MySQL訂購以逗號分隔的列字符串

[英]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";

預期的輸出應基於用戶的旅行者風格進行排序

在此處輸入圖片說明

這樣做的方法很多,下面是三種方法。

  1. 使用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
  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 | +===============+ 

請注意,旅行者樣式不再有逗號。 它們分為不同的行。

在上面的示例中, Attraction1具有2個相關樣式BackpackBeach Attraction2有2個相關的樣式BeachRelax 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM