1. 方法1:使用 FIND_IN_SET(推荐小数据量,无需动态SQL)

    DELIMITER //
    
    CREATE PROCEDURE GetUsersByTags(IN tag_list VARCHAR(255))
    BEGIN
     -- 假设 users 表中有 tags 字段存储如 '1,2,3' 的数据
     -- 或者查询 id 在传入列表中的用户
     SELECT * FROM users 
     WHERE FIND_IN_SET(id, tag_list) > 0;
    END //
    
    DELIMITER ;
    
    CALL GetUsersByIds('1,2,3');
    
  2. 方法2:动态 SQL + PREPARE(推荐大数据量,可走索引)

    DELIMITER //
    
    CREATE PROCEDURE GetUsersByIds(IN id_list VARCHAR(255))
    BEGIN
     SET @sql = CONCAT('SELECT * FROM users WHERE id IN (', id_list, ')');
     
     PREPARE stmt FROM @sql;
     EXECUTE stmt;
     DEALLOCATE PREPARE stmt;
    END //
    
    DELIMITER ;
    
    CALL GetUsersByIdsJson('1,2,3');
    

标签: none

评论已关闭