使用逗號分隔字符串在 MySQL 中是一個非常常見的場景。例如,我們可能需要在單個字段中存儲多個值,這些值可以使用逗號分隔并在查詢結果中進行解析。
CREATE TABLE users ( id INT(11) NOT NULL, name VARCHAR(50), interests VARCHAR(100) ); INSERT INTO users (id, name, interests) VALUES (1, 'Alice', 'music,reading,travel'), (2, 'Bob', 'sports,games'); SELECT * FROM users WHERE FIND_IN_SET('reading', interests);
在上面的示例中,我們創建了一個名稱為 users 的表,并在此處存儲用戶的姓名和興趣愛好。在興趣部分,我們使用逗號將多個值組合在一起,并在查詢功能中使用 FIND_IN_SET 函數找到具有給定興趣的所有用戶。
但是,如果我們要處理大量數據并使用字符串逗號分隔,那么性能可能會變得很慢。在這種情況下,我們可以使用新的表設計,將興趣愛好拆分為一個新的表,并使用 JOIN 進行查詢。
CREATE TABLE interests ( id INT(11) NOT NULL AUTO_INCREMENT, interest_name VARCHAR(50), PRIMARY KEY (id) ); CREATE TABLE user_interests ( user_id INT(11), interest_id INT(11) ); INSERT INTO interests (interest_name) VALUES ('music'), ('reading'), ('travel'), ('sports'), ('games'); INSERT INTO user_interests (user_id, interest_id) VALUES (1, 1), (1, 2), (1, 3), (2, 4), (2, 5); SELECT u.name, GROUP_CONCAT(i.interest_name) FROM users u JOIN user_interests ui ON u.id = ui.user_id JOIN interests i ON ui.interest_id = i.id GROUP BY u.id;
在這個例子中,我們拆分了興趣表并使用用戶興趣的 ID 來創建一個新的 user_interests 表。通過使用 JOIN 和 GROUP_CONCAT 函數來聯接這些表,我們可以在查詢結果中獲取每個用戶及其所有興趣愛好。
總的來說,使用逗號分隔字符串可以方便快捷地處理一些小型數據,但是在涉及到大量數據或頻繁查詢時,使用新的表設計將是更好的選擇。
上一篇mysql字符串查詢效率
下一篇mysql字符串有哪些