MySQL JOIN 鏈接時,條件爲以逗號分隔的字段與 ID 相匹配

1、背景sql

有一張相片表,一張相片所屬標籤表,一張相片能夠歸屬於多個標籤,表結構以下:函數

如今須要經過一次查詢,獲得每一張照片對應的標籤名稱,標籤名稱之間以固定的分隔符鏈接,結果以下圖:spa

2、查詢語句code

原生 Mysql 語句blog

SELECT
    think_img.id,
    think_img.NAME,
    think_img.label_id,
    GROUP_CONCAT( think_img_label.NAME SEPARATOR " - " ) AS labelName,
    think_img.update_time,
    think_img.create_time 
FROM
    `think_img`
    LEFT JOIN `think_img_label` ON FIND_IN_SET( think_img_label.id, think_img.label_id ) 
GROUP BY
    `think_img`.`id` 
ORDER BY
    `think_img`.`sort` 
    LIMIT 0,10;

TP5 查詢語句排序

Db::table('think_img')->field('think_img.*,GROUP_CONCAT( think_img_label.name separator " - " ) as labelName')
->join('think_img_label', 'FIND_IN_SET( think_img_label.id,think_img.label_id )', 'left')
->group('think_img.id')
->order('think_img.sort')
->select();

3、關鍵函數用法字符串

FIND_IN_SET(str,strList) table

  • str 要查詢的字符串
  • strList 字段名,參數以「,」分隔,如(1,2,6,8)
  • 查詢字段(strList)中包含的結果,返回結果null或記錄。

GROUP_CONCAT([DISTINCT] expr,[ORDER BY ASC/DESC col_name],[SEPARATOR str_val]) class

  • [DISTINCT] expr 要鏈接的字段
  • [ORDER BY col_name] 排序字段
  • [SEPARATOR str_val] 分隔符
相關文章
相關標籤/搜索