- 1 1. ã¯ããã«ïŒFIND_IN_SETãå¿ èŠã«ãªããããããã±ãŒã¹ã
- 2 2. FIND_IN_SET颿°ãšã¯ïŒãåºæ¬æ§æãšæ»ãå€ã
- 3 3. å®è·µäŸâ ïŒåºæ¬çãªäœ¿ãæ¹ãã·ã³ãã«ãªSELECTæã
- 4 4. å®è·µäŸâ¡ïŒåçãªæ€çŽ¢ã«å¯Ÿå¿ïŒå€æ°ããã©ãŒã 飿ºïŒ
- 5 5. FIND_IN_SETã®å¿çšæãGROUP_CONCATã»ãµãã¯ãšãªã»JOINã
- 6 6. FIND_IN_SETã®èœãšãç©Žãšæ³šæç¹ãæ§èœã»èšèšé¢ã
- 7 7. ãããã誀解ã»å€±æäŸãLIKEãšã®éãïŒæ°å€æ±ãã
- 8 8. FIND_IN_SETã®ä»£æ¿ææ®µããã¹ããã©ã¯ãã£ã¹ã
- 9 9. ãFAQããããã質åãšãã®åç
- 9.1 Q1. FIND_IN_SET颿°ã¯ã©ããªãšãã«äœ¿ãã®ãæ£è§£ã§ããïŒ
- 9.2 Q2. FIND_IN_SETãšLIKEã®éãã¯äœã§ããïŒ
- 9.3 Q3. FIND_IN_SET颿°ã䜿ããšSQLãé ããªãã®ã¯ãªãïŒ
- 9.4 Q4. æ°åãæ€çŽ¢ãããšãã«ã1ããšã10ãã誀èªèãããããšã¯ãããŸãããïŒ
- 9.5 Q5. WordPressã§FIND_IN_SETã䜿ããŸããïŒ
- 9.6 Q6. JSONåãšã®éãã¯ïŒFIND_IN_SETãã䟿å©ïŒ
- 10 10. ãŸãšãïŒFIND_IN_SETã¯â䟿å©ãªäŸå€âïœæ§é èšèšãèŠçŽããã£ããã«
1. ã¯ããã«ïŒFIND_IN_SETãå¿ èŠã«ãªããããããã±ãŒã¹ã
MySQLã§ããŒã¿ãæ±ã£ãŠãããšãã1ã€ã®ã«ã©ã ã«è€æ°ã®å€ãã«ã³ãã§åºåãããŠä¿åãããŠãããã±ãŒã¹ã«åºãããããšããããŸããããšãã°ããŠãŒã¶ãŒãéžæããã¿ã°ãã«ããŽãªæ
å ±ãèšå®ãã©ã°ãªã©ããphp,python,sql
ã®ããã«1ã€ã®æååãšããŠæ ŒçŽãããŠããç¶æ³ã§ãã
ãã®ãããªæ§é ã¯æ¬æ¥ãããŒã¿ããŒã¹ã®æ£èŠåã®èгç¹ã§ã¯æšå¥šãããŸãããããããæ¢åã·ã¹ãã ã®èšèšãæè»æ§ã®ããããŒã¿å ¥åãåªå ããå Žé¢ã§ã¯ãçŸå®çã«ãã®ãããªåœ¢åŒã䜿ããããåŸãªãããšããããŸãã
ã¿ã°æ€çŽ¢ã«å°ã£ããšãã®æäžäž»
ããšãã°ããããŠãŒã¶ãŒããpythonããšããã¿ã°ãæã£ãŠãããã©ããã調ã¹ãããšããŸããéåžžã®=
æŒç®åãLIKE
æŒç®åã§ã¯ãéšåäžèŽãååŸã®æåãšã®ãããã³ã°ç²ŸåºŠã«éçãããã誀ã£ãçµæãè¿ãããšããããŸãã
ãã®ãããªãšãã«åœ¹ç«ã€ã®ããFIND_IN_SET()
颿°ã§ãã
FIND_IN_SET()
ã¯ãã«ã³ãåºåãã®æååã®äžãããç¹å®ã®æååãäœçªç®ã«ååšããããå€å®ããMySQL颿°ã§ããååšããã°ãã®ã€ã³ããã¯ã¹ïŒ1å§ãŸãïŒãè¿ããååšããªããã°0
ãè¿ããŸãããã®æ©èœã䜿ãã°ãã¿ã°ãã«ããŽãªãèšå®å€ãªã©ãå«ãŸããŠãããã©ãããæ£ç¢ºã«ããã€æè»ã«å€å®ããããšãå¯èœã«ãªããŸãã
ãããã䜿çšã·ãŒã³
FIND_IN_SETãæŽ»èºããå žåçãªã±ãŒã¹ã¯æ¬¡ã®ãããªãã®ã§ãã
- ã«ã³ãåºåãã§ä¿åããããã¿ã°ãããã«ããŽãªãã®äžããç¹å®ã®å€ãæœåºããããšã
- 管çç»é¢ãªã©ã§CSV圢åŒã§å ¥åãããå€ãæ€çŽ¢æ¡ä»¶ãšããŠå©çšããããšã
- WordPressãªã©ã®CMSã§ãã¡ã¿æ å ±ã«å¯Ÿããæè»ãªçµã蟌ã¿ãè¡ããããšã
- è€æ°éžæé ç®ã1ã«ã©ã ã«ãŸãšããããŠããæ¢åããŒãã«ã«æãå ããã«åŠçããããšã
ããããããŒãºãããäžæ¹ã§ãFIND_IN_SETã¯äœ¿ãæ¹ã誀ããšããã©ãŒãã³ã¹äœäžã誀æ€åºã®åå ã«ãªãããšããããŸããããã§ãã®èšäºã§ã¯ãFIND_IN_SETã®åºæ¬çãªæ§æããå¿çšäŸã泚æç¹ãä»£æ¿ææ®µãŸã§ããå®äŸã亀ããªãããããããã解説ããŠãããŸãã
2. FIND_IN_SET颿°ãšã¯ïŒãåºæ¬æ§æãšæ»ãå€ã
MySQLã®FIND_IN_SET()
颿°ã¯ãã«ã³ãã§åºåãããæååã®äžãããæå®ããå€ãäœçªç®ã«ãããã調ã¹ãããã®é¢æ°ã§ããããŒã¿ããŒã¹å
ã®å€ãè€æ°ãŸãšããŠ1ã€ã®ãã£ãŒã«ãã«ä¿åãããŠãããããªå Žåã«ãéåžžã«äŸ¿å©ã§ãã
ãã®é¢æ°ã¯ãMySQLåºæã®ãã®ã§ãããä»ã®ããŒã¿ããŒã¹ïŒããšãã°PostgreSQLãSQLiteïŒã«ã¯æšæºã§ã¯ååšããªããããMySQLç°å¢ã«ç¹åããæ©èœãšãããŸãã
åºæ¬æ§æ
FIND_IN_SET(æ€çŽ¢å€, ã«ã³ãåºåãã®æåå)
- æ€çŽ¢å€ïŒæ¢ãããæåå
- ã«ã³ãåºåãã®æååïŒæ€çŽ¢å¯Ÿè±¡ãšãªãã«ã³ãåºåãã®ãªã¹ã
䜿çšäŸ
ããšãã°ã次ã®ãããªSQLãèããŠã¿ãŸãããã
SELECT FIND_IN_SET('python', 'php,python,sql');
ãã®å Žåã'python'
ã¯2çªç®ã«ãããããæ»ãå€ãšããŠ2
ãè¿ãããŸãã
éã«ããªã¹ãã®äžã«æå®ããå€ãååšããªãå Žåã¯ã次ã®ããã«0
ãè¿ãããŸãã
SELECT FIND_IN_SET('ruby', 'php,python,sql');
-- çµæïŒ0
ããã«ãã©ã¡ããã®åŒæ°ãNULLã§ããå Žåã¯ãæ»ãå€ãNULLã«ãªããŸãã
SELECT FIND_IN_SET(NULL, 'php,python,sql');
-- çµæïŒNULL
æ»ãå€ã®ä»æ§
æ¡ä»¶ | æ»ãå€ |
---|---|
å€ããªã¹ãå ã«ååšãã | 1以äžïŒãã®äœçœ®ïŒ |
å€ããªã¹ãå ã«ååšããªã | 0 |
åŒæ°ã®ã©ã¡ãããNULL | NULL |
ãã®ããã«ãæ»ãå€ãããŸãå©çšããããšã§ãæ€çŽ¢ã ãã§ãªãããå«ãŸããŠããé åºã確èªãããããšãã£ãå Žé¢ã«ãå¿çšã§ããŸãã
泚æç¹ïŒ0ã¯ãååšããªããããšãæå³ãã
æ»ãå€ã0
ã®ãšãã¯ãããªã¹ãå
ã«ååšããªããããšã瀺ããŸããMySQLã§ã¯0
ã¯FALSEãšããŠæ±ããããããWHERE
å¥ã§å©çšããéã«ãã®ãŸãŸäœ¿ããšèª€åäœã®åå ã«ãªãããšããããŸãã
æ¬¡ç« ã§ã¯ãå®éã®ããŒãã«ããŒã¿ã«å¯ŸããŠã©ã®ããã«FIND_IN_SET
ã䜿ã£ãŠæ€çŽ¢ããããåºæ¬çãªã¯ãšãªäŸã玹ä»ããŠãããŸãã
3. å®è·µäŸâ ïŒåºæ¬çãªäœ¿ãæ¹ãã·ã³ãã«ãªSELECTæã
FIND_IN_SET()
颿°ã¯ããã®åã®éããã»ããã®äžããèŠã€ãããããã®é¢æ°ã§ãããå®éã«ããŒãã«ããŒã¿ã察象ã«äœ¿çšããå Žé¢ã§ã¯ãã©ã®ããã«æžãã°ããã®ã§ããããïŒ
ããã§ã¯ããã£ãšãã·ã³ãã«ãªSELECT
æã䜿ã£ã䜿çšäŸã玹ä»ããŸãã
äŸé¡ããŒãã«ã®æºå
ãŸãã以äžã®ãããªããŒãã«ãæ³å®ããŸãã
ããŒãã«åïŒuser_tags
id | name | tags |
---|---|---|
1 | ç°äž | php,python,sql |
2 | éŽæš | java,ruby |
3 | äœè€ | python,c,go |
ãã®tags
ã«ã©ã ã¯ããŠãŒã¶ãŒãç»é²ããã¹ãã«ã¿ã°ãã«ã³ãåºåãã§ä¿åããŠãããã®ã§ãã
äŸïŒ”python”ãå«ããŠãŒã¶ãŒãæ€çŽ¢ãã
ãã®äžãããpythonããšããã¿ã°ãæã£ãŠãããŠãŒã¶ãŒã ããæœåºãããå Žåãæ¬¡ã®ãããªSQLãæžããŸãã
SELECT * FROM user_tags
WHERE FIND_IN_SET('python', tags);
å®è¡çµæïŒ
id | name | tags |
---|---|---|
1 | ç°äž | php,python,sql |
3 | äœè€ | python,c,go |
ãã®ããã«ãtags
ã«ã©ã ã®äžã§ãpythonããå«ãŸããŠããã¬ã³ãŒãã ããè¿ãããŸããã
æååã®æ£ç¢ºãªäžèŽããã€ã³ã
FIND_IN_SET()
ã¯ãæååã®å®å
šäžèŽã«ãã£ãŠãããã³ã°ãè¡ããŸãããã®ããããpyãããpythããªã©ã®éšåæååã§ã¯ãããããŸãããéšåäžèŽãå¿
èŠãªå Žåã¯LIKE
æŒç®åã䜿ããŸãããLIKE '%python%'
ã®ãããªæžãæ¹ã¯php,python,sql
ã®äžã®php
ãŸã§èª€ã£ãŠãããããŠããŸããªã¹ã¯ããããããã«ã³ãåºåãã®ãªã¹ãã«ã¯FIND_IN_SET
ã®æ¹ãé©ããŠããŸãã
SQLã«å€æ°ã䜿ã£ãæ€çŽ¢äŸ
åçã«æ€çŽ¢å€ãå€ãããå Žåã倿°ãçšããããšã§æè»ã«æ€çŽ¢ã§ããŸãã
SET @skill = 'python';
SELECT * FROM user_tags
WHERE FIND_IN_SET(@skill, tags);
ã¢ããªã±ãŒã·ã§ã³ãã¹ãã¢ãããã·ãŒãžã£ãšé£æºããå Žé¢ã§ãããã®æžãæ¹ãæå¹ã§ãã
4. å®è·µäŸâ¡ïŒåçãªæ€çŽ¢ã«å¯Ÿå¿ïŒå€æ°ããã©ãŒã 飿ºïŒ
å®éã®Webã¢ããªã±ãŒã·ã§ã³ãæ¥åã·ã¹ãã ã§ã¯ãæ€çŽ¢æ¡ä»¶ãSQLã«åçã«çµã¿èŸŒãå Žé¢ããããããŸãã
ããšãã°ããŠãŒã¶ãŒããã©ãŒã ã§éžæããå€ããã·ã¹ãã å
ã§èªåçæãããå€ã䜿ã£ãŠãFIND_IN_SET()
ã§æ€çŽ¢ãããã±ãŒã¹ã§ãã
ããã§ã¯ã倿°ãããã¯ãšã³ã飿ºãæ³å®ãããå®è·µçãªäœ¿ãæ¹ã玹ä»ããŸãã
SQLå ã®å€æ°ã䜿ã£ãåçæ€çŽ¢
MySQLã®ã»ãã·ã§ã³å€æ°ïŒ@倿°å
ïŒã䜿ãã°ãæ€çŽ¢å€ãã³ãŒãã®åé ã§å®çŸ©ããŠãè€æ°ã®ã¯ãšãªã§åå©çšã§ããŸãã
-- æ€çŽ¢ãããã¿ã°ã倿°ã«æ ŒçŽ
SET @target_tag = 'python';
-- FIND_IN_SETã§åçæ€çŽ¢
SELECT * FROM user_tags
WHERE FIND_IN_SET(@target_tag, tags);
ãã®ããã«ããããšã§ãæ€çŽ¢å€ãç°¡åã«å·®ãæ¿ãå¯èœã«ãªããã¹ãã¢ãããã·ãŒãžã£ããããåŠçãªã©ã§ã掻çšã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãšã®é£æºïŒPHPã®å Žå
ããšãã°PHPã䜿ã£ãŠãWebãã©ãŒã ã®å ¥åãããšã«SQLãçºè¡ããå Žåã以äžã®ãããªã³ãŒãã«ãªããŸãã
<?php
$tag = $_GET['tag']; // äŸ: ãã©ãŒã å
¥å "python"
// SQLçæïŒããªãã¢ãã¹ããŒãã¡ã³ããæãŸããïŒ
$sql = "SELECT * FROM user_tags WHERE FIND_IN_SET(?, tags)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$tag]);
$results = $stmt->fetchAll();
?>
ãã®ããã«ãããªãã¢ãã¹ããŒãã¡ã³ããšçµã¿åãããã°ãSQLã€ã³ãžã§ã¯ã·ã§ã³å¯Ÿçãäžå šã§ãã
WordPressã§ã®å¿çšïŒã«ã¹ã¿ã ãã£ãŒã«ãã®ã¿ã°æ€çŽ¢
WordPressã§ã¯ãmeta_query
ã䜿ã£ãŠã«ã¹ã¿ã ãã£ãŒã«ããæ€çŽ¢ã§ããŸãããFIND_IN_SETãçµã¿èŸŒã¿ããå Žåã¯ã以äžã®ããã«çŽæ¥SQLã䜿ãå¿
èŠããããŸãã
äŸïŒã«ã¹ã¿ã ãã£ãŒã«ã _user_tags
ã« "php,python,sql"
ãä¿åãããŠãããšã
global $wpdb;
$tag = 'python';
$sql = $wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key = %s AND FIND_IN_SET(%s, meta_value)",
'_user_tags', $tag
);
$results = $wpdb->get_results($sql);
ãã®æ¹æ³ã䜿ãã°ãWordPressã®æšæºæ©èœã§ã¯å¯Ÿå¿ããããªãæè»ãªæ€çŽ¢ãå¯èœã«ãªããŸãã
泚æïŒç©ºçœãå šè§ã«ã³ãã«èŠæ³šæ
FIND_IN_SETã䜿ãå Žåãæ€çŽ¢å¯Ÿè±¡ã®ã«ã³ãåºåãæååã«äœèšãªç©ºçœãå
šè§æåãå«ãŸããŠãããšäžèŽããŸããã
ãã®ãããããŒã¿ç»é²æãæ€çŽ¢åã«ã次ã®ãããªååŠçãè¡ãããšãæšå¥šãããŸãã
TRIM()
颿°ã§ç©ºçœãé€å»- ã«ã³ãã®åœ¢åŒãæ£èŠåïŒå šè§âåè§ïŒ
- ã¢ããªã±ãŒã·ã§ã³åŽã§å ¥åãã§ãã¯
5. FIND_IN_SETã®å¿çšæãGROUP_CONCATã»ãµãã¯ãšãªã»JOINã
FIND_IN_SET颿°ã¯ãåºæ¬çãªåäœæ€çŽ¢ã ãã§ãªããä»ã®SQL颿°ããµãã¯ãšãªãšçµã¿åãããããšã§ãããæè»ã§è€éãªæ€çŽ¢åŠçã«ã察å¿ã§ããŸãããã®ç« ã§ã¯ã代衚çãª3ã€ã®å¿çšãã¿ãŒã³ã玹ä»ããŸãã
GROUP_CONCATãšã®çµã¿åãã
ãŸãã¯ãè€æ°è¡ã®å€ã1ã€ã®ã«ã³ãåºåãæååãšããŠæ±ããGROUP_CONCAT()
ãšã®é£æºã§ããããšãã°ãããããŒãã«ãã察象ãšãªãã¿ã°ã®ãªã¹ããäœãããããå¥ã®ããŒãã«ã®æ€çŽ¢æ¡ä»¶ãšããŠäœ¿ãããšãããããªå Žé¢ã§æå¹ã§ãã
äŸïŒuser_tagsããŒãã«ã®tags
ã«ã©ã ã®å€ãšãmaster_tagsããŒãã«ã®ã¿ã°äžèЧãçªãåããã
SELECT *
FROM user_tags
WHERE FIND_IN_SET('python', (
SELECT GROUP_CONCAT(tag_name)
FROM master_tags
));
ãã®ã¯ãšãªã§ã¯ãmaster_tags
ã«ååšããã¿ã°äžèЧã1ã€ã®ã«ã³ãåºåãæååã«å€æããããã«å¯ŸããŠFIND_IN_SET()
ã§ãããã³ã°ãè¡ã£ãŠããŸãã
泚æç¹ãšããŠã¯ãGROUP_CONCATã§çæãããæååã®é·ãã«ã¯å¶éïŒããã©ã«ãã¯1024æåïŒããããŸãã®ã§ã察象ããŒã¿ãå€ãå Žåã¯group_concat_max_len
ã®èšå®ã確èªããŠãã ããã
ãµãã¯ãšãªã§åçã«å€ãååŸããŠæ€çŽ¢
次ã«ãæ€çŽ¢å¯Ÿè±¡ã®å€ããµãã¯ãšãªã§åçã«ååŸãããããFIND_IN_SETã«æž¡ãæ¹æ³ã§ãã
äŸïŒææ°ã®èšå®å€ãæã€ç®¡çããŒãã«ããæ€çŽ¢æ¡ä»¶ãååŸããããã«åºã¥ããŠããŒã¿ãçµã蟌ã
SELECT *
FROM user_tags
WHERE FIND_IN_SET(
'python',
(SELECT setting_value FROM search_conditions WHERE id = 1)
);
ãã®äŸã§ã¯ãæ€çŽ¢æ¡ä»¶ã管çããŒãã«ã«æ ŒçŽããŠãããã·ã¹ãã èšå®ã倿Žããã ãã§æ€çŽ¢å
容ãåãæ¿ããããããã«ããŠããŸãã
æè»æ§ãé«ããããã«ã¹ã¿ãã€ãºå¯èœãªç®¡çç»é¢ãããã·ã¥ããŒãç³»ã¢ããªã±ãŒã·ã§ã³ã§äŸ¿å©ã§ãã
JOINãšã®æ¯èŒïŒæ£èŠåãããæ§é ã§ã¯JOINãåªäœ
FIND_IN_SETã¯äŸ¿å©ãªé¢æ°ã§ãããæ¬æ¥ããŒã¿ããŒã¹èšèšãæ£èŠåãããŠããå Žåã¯ãJOINã䜿ã£ãæ€çŽ¢ã®æ¹ãå¹ççãã€å®å šã§ãã
ããšãã°ã以äžã®ããã«äžéããŒãã«ã䜿ã£ãå€å¯Ÿå€ã®é¢ä¿ã§ããã°ãFIND_IN_SETã䜿ãããšãã·ã³ãã«ã«JOINã§å®çŸã§ããŸãã
æ§æäŸïŒ
- usersããŒãã«
- tagsããŒãã«
- user_tag_relationããŒãã«ïŒuser_idãštag_idãæã€äžéããŒãã«ïŒ
SELECT users.*
FROM users
JOIN user_tag_relation ON users.id = user_tag_relation.user_id
JOIN tags ON user_tag_relation.tag_id = tags.id
WHERE tags.name = 'python';
ãã®ãããªèšèšã«ããããšã§ãæ€çŽ¢ããã©ãŒãã³ã¹ãåäžããå°æ¥çãªããŒã¿æ¡åŒµã«ã察å¿ãããããªããŸãã
ã©ã®ææ³ãéžã¶ã¹ããïŒ
ææ³ | åããŠããã±ãŒã¹ |
---|---|
FIND_IN_SET + GROUP_CONCAT | ãã£ã«ã¿ãŒã®ãªã¹ããåçã«å¶åŸ¡ãããå Žå |
FIND_IN_SET + ãµãã¯ãšãª | 管çããŒãã«ãªã©ããæ¡ä»¶ãæœåºããŠäœ¿ãããå Žå |
JOIN | æ£èŠåãããæ§é ãããŒã¿éãå€ãå Žåãããã©ãŒãã³ã¹éèŠ |
ãã®ããã«ãFIND_IN_SET()
ã¯ä»ã®SQLæ©èœãšçµã¿åãããããšã§ãæ€çŽ¢æ¡ä»¶ã®æè»æ§ã倧å¹
ã«é«ããããšãã§ããŸãããã ãã䜿çšããå Žé¢ãããŒã¿æ§é ã«ãã£ãŠã¯ãJOINãå¥ã®ææ³ã®æ¹ãé©ããŠããå Žåããããããèšèšãšç®çã«å¿ããŠäœ¿ãåããããšãéèŠã§ãã

6. FIND_IN_SETã®èœãšãç©Žãšæ³šæç¹ãæ§èœã»èšèšé¢ã
FIND_IN_SET颿°ã¯ãã«ã³ãåºåãã®æååã«å¯ŸããŠæè»ãªæ€çŽ¢ãå¯èœã«ãã䟿å©ãªé¢æ°ã§ããã宿ãªå€çšã¯é¿ããã¹ãã§ãã
ããã§ã¯ãå®éã®éçºçŸå Žã§ãããåé¡ã«ãªãããã©ãŒãã³ã¹é¢ãããŒã¿ããŒã¹èšèšäžã®ãªã¹ã¯ã«ã€ããŠè§£èª¬ããŸãã
ã€ã³ããã¯ã¹ãå¹ããªãããããã©ãŒãã³ã¹ãæªåãã
FIND_IN_SETæå€§ã®æ¬ ç¹ã¯ãæ€çŽ¢å¯Ÿè±¡ã®ã«ã©ã ã«ã€ã³ããã¯ã¹ãå¹ããªãããšã§ãã
ããšãã°ã以äžã®ãããªã¯ãšãªãå®è¡ãããšããŸãã
SELECT * FROM user_tags
WHERE FIND_IN_SET('python', tags);
ãã®å Žåãtags
ã«ã©ã ã«ã€ã³ããã¯ã¹ã匵ã£ãŠããŠããFIND_IN_SET颿°ã䜿ãããšã§ãã«ããŒãã«ã¹ãã£ã³ã«ãªããMySQLã¯å
šè¡ãèªã¿èŸŒã¿ãªãã鿬¡æååãè§£æãããããããŸããã
ãã®ããã察象ã®ã¬ã³ãŒããæ°åãæ°äžä»¶ãè¶ ãããããªå€§èŠæš¡ããŒã¿ã§ã¯ãæ€çŽ¢éåºŠãæ¥æ¿ã«äœäžããŸãã
æšå¥šããã察å¿ïŒ
- å¿ èŠã«å¿ããŠãäžéããŒãã«ã䜿ã£ãæ£èŠåãæ€èš
- ã©ãããŠãFIND_IN_SETã䜿ãå Žåã¯ã察象ã¬ã³ãŒããäºåã«çµãïŒ
LIMIT
ãWHERE
ã®å¥æ¡ä»¶ãšäœµçšïŒ
æ£èŠåã«åããæ§é ã«äŸåããŠããŸã
ã«ã³ãåºåãã®æååã1ã«ã©ã ã«ãŸãšããæ§é èªäœããããŒã¿ããŒã¹ã®æ£èŠåååã«åããŠããŸãã
ããšãã°ã"php,python,sql"
ãšããæååã¯äžèŠæ±ããããããã«èŠããŸããã以äžã®ãããªåé¡ããããŸãã
- å€ããšã®éèšãçµ±èšåŠçãé£ãã
- äžéšã®å€ã ããæŽæ°ã»åé€ããã®ãå°é£
- å€ã®éè€ãã¹ãã«ãã¹ãå ¥ããããïŒäŸïŒãPythonããšãpythonãïŒ
é·æçã«èŠãã°ãå¯èªæ§ã»ä¿å®æ§ã»æ¡åŒµæ§ã®èгç¹ããã倧ããªãã¡ãªãããšãªãããšãå€ããç¹ã«ããŒã éçºãã¹ã±ãŒã©ãã«ãªãµãŒãã¹ã§ã¯èŽåœçã§ãã
ã«ã³ã以å€ã®æåã空çœã®æ··å ¥ã§æ€çŽ¢ã«å€±æãã
FIND_IN_SETã¯éåžžã«ç¹çްã§ããããŒã¿äžã«ä»¥äžã®ãããªåé¡ããããšãäžèŽããªããªããŸãã
- å€ã®ååŸã«ç©ºçœïŒã¹ããŒã¹ãã¿ããæ¹è¡ïŒããã
- å šè§ã«ã³ãïŒãïŒãæ··ãã£ãŠãã
- æå³ããªãããã«ã¯ãªãŒããã·ã³ã°ã«ã¯ãªãŒãã§å²ãŸããŠãã
äŸïŒ
FIND_IN_SET('python', 'php, python ,sql')
-- â ãããããªãïŒç©ºçœä»ã " python " ãšãªã£ãŠããŸãïŒ
察çïŒ
- ããŒã¿ãç»é²ããæ®µéã§
TRIM()
åŠçãå ¥ããŠç©ºçœãé€å»ãã - å
¥åå€ã
REPLACE(tags, ' ', '')
ã§ååŠçãã - ããã³ããšã³ãã§ã®å ¥åå¶éïŒäžèŠãªç©ºçœã»èšå·ãæé€ïŒ
äžæçãªå¯Ÿå¿çãšããŠã¯æå¹ãã§ãæä¹ éçšã«ã¯äžåã
FIND_IN_SETã¯ãæ¢åã®éæ£èŠåããŒãã«ãçæçã«æŽ»ããããã®æ«å®çãªææ®µãšããŠã¯éåžžã«æçšã§ãã
ãã ããæ°ããèšèšããã·ã¹ãã ãé·æçã«æ¡åŒµã»ä¿å®ãããäºå®ã®ããã·ã¹ãã ã§ã¯ã極åé¿ããããå°æ¥çã«æ£èŠåãžç§»è¡ããèšç»ãæã£ãŠããããšãéèŠã§ãã
7. ãããã誀解ã»å€±æäŸãLIKEãšã®éãïŒæ°å€æ±ãã
FIND_IN_SET颿°ã¯äžèŠã·ã³ãã«ã«äœ¿ããããã«èŠããŸãããæ£ããçè§£ããŠäœ¿ããªããšæå³ããªãçµæã«ãªãããšããããŸãã
ãã®ç« ã§ã¯ãå®åã§ãå€ãå
žåçãªèª€è§£ã倱æãã¿ãŒã³ã玹ä»ããããããã®å¯ŸçãåãããŠè§£èª¬ããŸãã
誀解â ïŒLIKEãšFIND_IN_SETã®éããããã£ãŠããªã
ãã£ãšãå€ãã®ããLIKE
æŒç®åãšFIND_IN_SET()
ã®éããæ£ããçè§£ããã誀ã£ãæ¡ä»¶ã§æ€çŽ¢ããŠããŸãã±ãŒã¹ã§ãã
-- ãããã誀çš
SELECT * FROM user_tags WHERE tags LIKE '%python%';
ãã®ã¯ãšãªã¯äžèŠæ£ããåäœãããã«èŠããŸãããå®ã¯python
ãšããæååãéšåçã«å«ãããŒã¿ãã¹ãŠã«ãããããŠããŸããŸãã
ããšãã°ã"cpython"
, "pythonista"
, "java,pythonic"
ãªã©ãæ¬æ¥ããããããããªãã±ãŒã¹ãŸã§æŸã£ãŠããŸããŸãã
ãŸããphp,python,sql
ã®ãããªã«ã³ãåºåãã®äžã«ãããpythonãã ããäžèŽããããå Žåã«ããéšåäžèŽã®LIKE
ã§ã¯èª€æ€åºã®å¯èœæ§ãé«ãã®ã§ãã
æ£ç¢ºã«ãpythonããšããåèªãå«ãŸããŠããããšã確èªãããå Žåã¯ãFIND_IN_SET()
ãé©åã§ãã
-- æ£ããæžãæ¹
SELECT * FROM user_tags WHERE FIND_IN_SET('python', tags);
誀解â¡ïŒãæ°å€åãã®å€ã«å¯ŸããŠFIND_IN_SETã䜿ã£ããæå³éãã«åããªã
FIND_IN_SETã¯ãäž¡æ¹ã®åŒæ°ãæååãšããŠæ±ãããããšãåæãšããŠããŸãã
ãã®ãããæ¬¡ã®ãããªããŒã¿ã®å Žåã«äºæãã¬çµæã«ãªãããšããããŸãã
-- tagsã«ã©ã ã«: 1,2,10,20
SELECT * FROM user_tags WHERE FIND_IN_SET(1, tags);
ãã®ã¯ãšãªã§ã¯ã1ã10ãäžèŽããŠããŸããšæãããã¡ã§ãããå®éã«ã¯FIND_IN_SET(1, '1,2,10,20')
ã¯ã1çªç®ã®1ãã«ã ãäžèŽããŸãã
FIND_IN_SETã¯å€ãåºåã£ãŠå®å
šäžèŽã§å€å®ããŠããããã1
ã¯10
ã21
ãšã¯ç°ãªããŸãã
ãã ããéçºè ã«ãã£ãŠã¯ãã®æåã誀解ããã1ããã10ãã«ãããããããšåéãããã±ãŒã¹ããããŸãã
察çïŒ åžžã«æååãšããŠæ±ãããã«ããããšã§ãæå³ããªãåäœãé²ããŸãã
誀解â¢ïŒç©ºçœã»å šè§ã«ã³ãã»æ¹è¡ãªã©ãæ··ãã£ãŠæ£ããäžèŽããªã
FIND_IN_SETã¯éåžžã«ç¹çްã§ããããŒã¿äžã«ä»¥äžã®ãããªåé¡ããããšãäžèŽããªããªããŸãã
- å€ã®ååŸã«ç©ºçœïŒã¹ããŒã¹ãã¿ããæ¹è¡ïŒããã
- å šè§ã«ã³ãïŒãïŒãæ··ãã£ãŠãã
- æå³ããªãããã«ã¯ãªãŒããã·ã³ã°ã«ã¯ãªãŒãã§å²ãŸããŠãã
äŸïŒ
FIND_IN_SET('python', 'php, python ,sql')
-- â ãããããªãïŒç©ºçœä»ã " python " ãšãªã£ãŠããŸãïŒ
察çïŒ
- ããŒã¿ãç»é²ããæ®µéã§
TRIM()
åŠçãå ¥ããŠç©ºçœãé€å»ãã - å
¥åå€ã
REPLACE(tags, ' ', '')
ã§ååŠçãã - ããã³ããšã³ãã§ã®å ¥åå¶éïŒäžèŠãªç©ºçœã»èšå·ãæé€ïŒ
ãŸãšãïŒFIND_IN_SETãå®å šã«äœ¿ãããã®ãã€ã³ã
誀解ã»èœãšã穎 | 察å¿ç |
---|---|
LIKEãšæ··åããŠèª€æ€åºãã | å®å šäžèŽãå¿ èŠãªå Žé¢ã§ã¯FIND_IN_SETã䜿ã |
æ°å€ã®æ±ãã§æãã¬åäœ | æ°å€ãæååãšããŠæ±ããæ¯èŒãæç€ºãã |
空çœãå šè§ã圱é¿ãã | ããŒã¿ç»é²ã»æ€çŽ¢åã«ååŠçã培åºãã |
ãããã现ããæåãçè§£ããã«äœ¿ã£ãŠããŸããšããæ€çŽ¢ã§ããŠããã€ãããã§å®ã¯æåŸ ããããŒã¿ãæœåºãããŠããªãã£ããšããé倧ãªãã°ã«ã€ãªããå¯èœæ§ããããŸãã
æ¬¡ç« ã§ã¯ããããã®åé¡ãæ ¹æ¬ãã解決ããããã«æå¹ãªãFIND_IN_SETã®ä»£æ¿ææ®µãã«ã€ããŠè§£èª¬ããŸãã
8. FIND_IN_SETã®ä»£æ¿ææ®µããã¹ããã©ã¯ãã£ã¹ã
FIND_IN_SET颿°ã¯ãã«ã³ãåºåãã®æååã«å¯ŸããŠæè»ãªæ€çŽ¢ãå¯èœã«ãã䟿å©ãªé¢æ°ã§ãããå€§èŠæš¡ããŒã¿ãæ¡åŒµæ§ãæ±ããã·ã¹ãã ã«ã¯äžåãã§ãã
ãã®ç« ã§ã¯ãFIND_IN_SETã䜿çšããªããããæšå¥šãããä»£æ¿ææ®µïŒãã¹ããã©ã¯ãã£ã¹ïŒã玹ä»ããŸãã
æ£èŠåãããããŒãã«èšèšã«åãæ¿ãã
ãã£ãšãæšå¥šãããæ¹æ³ã¯ãããŒã¿ããŒã¹ãæ£èŠåããå€ãåå¥ã®è¡ãšããŠç®¡çããããšã§ãã
ã«ã³ãåºåãã®1ã«ã©ã ã«è€æ°ã®å€ãä¿åããã®ã§ã¯ãªããäžéããŒãã«ïŒãªã¬ãŒã·ã§ã³ããŒãã«ïŒãçšããŠãå€å¯Ÿå€ã®é¢ä¿ãæç¢ºã«è¡šçŸããŸãã
äŸïŒãŠãŒã¶ãŒãšã¿ã°ã®é¢ä¿
åŸæ¥ã®æ§é ïŒéæ£èŠåïŒïŒ
user_id | tags |
---|---|
1 | php,python,sql |
æ£èŠååŸã®æ§é ïŒ
users
ããŒãã«
id | name |
---|---|
1 | ç°äž |
tags
ããŒãã«
id | name |
---|---|
1 | php |
2 | python |
3 | sql |
user_tag_relation
ïŒäžéããŒãã«ïŒ
user_id | tag_id |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
ãã®ããã«åããããšã§ãFIND_IN_SETã䜿ãããšãJOINã§æè»ã«æ€çŽ¢ãå¯èœã«ãªããŸãã
SELECT users.*
FROM users
JOIN user_tag_relation ON users.id = user_tag_relation.user_id
JOIN tags ON user_tag_relation.tag_id = tags.id
WHERE tags.name = 'python';
ãã®æ¹æ³ãªãã€ã³ããã¯ã¹ãæå¹ã«äœ¿ããããã©ãŒãã³ã¹ãæ¡åŒµæ§ãå€§å¹ ã«åäžããŸãã
JSONåãæŽ»çšããïŒMySQL 5.7以éïŒ
MySQL 5.7以éã§ã¯ãJSONåã®ã«ã©ã ãå©çšå¯èœã§ããã«ã³ãåºåãã®æååã§ã¯ãªããJSONé åãšããŠå€ãæ ŒçŽããããšã§ãæ§é åãããããŒã¿ã®ãŸãŸä¿åãã颿°ã䜿ã£ãŠæ€çŽ¢ãã§ããŸãã
äŸïŒ
["php", "python", "sql"]
æ€çŽ¢äŸïŒ
SELECT * FROM user_tags
WHERE JSON_CONTAINS(tags_json, '"python"');
ãã®æ¹æ³ã§ã¯ãã¿ã°ãæ§é çã«ä¿åãããŠããã誀æ€åºã空çœã®æ··å
¥ãšãã£ãåé¡ãé²ããŸãã
ãŸããJSONåã«ã¯å°çšã®ã€ã³ããã¯ã¹ïŒMySQL 8.0以éïŒãå©çšã§ããããã©ãŒãã³ã¹åäžãæåŸ
ã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³åŽã§åè§£ã»åæ§ç¯ãã
ã©ãããŠãFIND_IN_SETã䜿ãèšèšãå€ããããªãå Žåã§ããã¢ããªã±ãŒã·ã§ã³åŽã§é åã«å€æããŠã«ãŒãåŠçãSQLã®INå¥ã«å€æããããšã§ãé¡äŒŒã®æåãå®çŸããããšãã§ããŸãã
äŸïŒPHPïŒ:
$tags = explode(',', $record['tags']);
if (in_array('python', $tags)) {
// åŠçãå®è¡
}
ãã®ããã«ããã°ãããŒã¿ããŒã¹åŽã®è² è·ã軜æžãã€ã€ãå®å šãªåŠçãè¡ãããšãå¯èœã§ãã
FIND_IN_SETã¯âäŸå€åŠçâãšããŠæŽ»çšãã¹ã
ç¹°ãè¿ãã«ãªããŸãããFIND_IN_SETã¯ãæ¢åã®éæ£èŠåããŒãã«ãçæçã«æŽ»ããããã®æ«å®çãªææ®µããšããŠã¯éåžžã«æçšã§ãã
ãã ããæ°èŠã§èšèšããã·ã¹ãã ãé·æçã«æ¡åŒµã»ä¿å®ãããäºå®ã®ããã·ã¹ãã ã§ã¯ã極åé¿ããããå°æ¥çã«æ£èŠåãžç§»è¡ããèšç»ãæã£ãŠããããšãéèŠã§ãã
ææ³ | é©ããã±ãŒã¹ |
---|---|
æ£èŠå + JOIN | ããã©ãŒãã³ã¹ã»æ¡åŒµæ§ãéèŠãªå Žå |
JSONå + JSON颿° | æè»ãªããŒã¿æ§é ã§æ ŒçŽãããå Žå |
ã¢ããªã±ãŒã·ã§ã³åŽåŠç | äžæçãªåŠçã»èªã¿åãå°çšã®å Žå |
FIND_IN_SET | æ§é 倿Žãé£ããæ¢åDBã®çæå¯Ÿå¿ç |
9. ãFAQããããã質åãšãã®åç
FIND_IN_SET颿°ã«é¢ããŠã¯ãå®éã®æ¥åãåŠç¿äžã«å€ãã®çåãæ··ä¹±ãçãããããã€ã³ãããããŸãã
ããã§ã¯ãæ€çŽ¢æå³ã«ãåèŽããããããããã質åãQ&A圢åŒã§æŽçããŸããã
Q1. FIND_IN_SET颿°ã¯ã©ããªãšãã«äœ¿ãã®ãæ£è§£ã§ããïŒ
A.
FIND_IN_SET颿°ã¯ãã«ã³ãåºåãã®æååã«ç¹å®ã®å€ãå«ãŸããŠãããã調ã¹ãããšãã«äœ¿çšãããŸãã
å
·äœçã«ã¯ã次ã®ãããªå Žé¢ã«é©ããŠããŸãïŒ
- èšèšäžã1ã«ã©ã ã«è€æ°å€ãä¿åããå¿ èŠãããïŒäŸïŒã¿ã°ãæš©éããã©ã°ãªã©ïŒ
- æ¢åã®éæ£èŠåããŒã¿ããŒã¹ãä¿®æ£ããã«æ€çŽ¢ã ãããã
- å°ãäžèŠæš¡ã®ããŒã¿éã§ãéå®çã«äœ¿çšããçšéïŒç®¡çç»é¢ãããŒã«ç³»ïŒ
ãã ãã倧éããŒã¿ãæ¬çªã·ã¹ãã ã®ã³ã¢åŠçã«ã¯åããŠããŸããã
Q2. FIND_IN_SETãšLIKEã®éãã¯äœã§ããïŒ
A.LIKE '%å€%'
ã¯éšåäžèŽæ€çŽ¢ã§ãããååŸã«äœããã£ãŠããããããŸãã
äžæ¹ãFIND_IN_SET('å€', ã«ã³ãåºåãæåå)
ã¯ãã«ã³ãã§åºåããã1ã€1ã€ã®å€ãšããŠå®å
šäžèŽã§æ€çŽ¢ããŸãã
-- LIKEã®äŸïŒ"python"ãå«ããã¹ãŠã«ãããïŒ
tags LIKE '%python%'
-- FIND_IN_SETã®äŸïŒ"python"ãšããç¬ç«ããèŠçŽ ã«ã ããããïŒ
FIND_IN_SET('python', tags)
ãpythonãããcpythonãããpythonistaãã«ãå«ãŸããŠããŸãã®ã¯LIKEã®èœãšã穎ã§ãã
Q3. FIND_IN_SET颿°ã䜿ããšSQLãé ããªãã®ã¯ãªãïŒ
A.
FIND_IN_SETã¯ãã€ã³ããã¯ã¹ã䜿ããã«ãã«ã¹ãã£ã³ãã颿°ã ããã§ãã
ã«ã©ã å
šäœã1è¡ãã€ç¢ºèªããæååãåè§£ããŠæ¯èŒããåŠçãå
¥ããããããŒã¿éãå¢ãããšæ¥æ¿ã«åŠçæéãå»¶ã³ãŸãã
ãã®ãããã¬ã³ãŒãæ°ãå€ãããŒãã«ã§ã¯ããã©ãŒãã³ã¹å£åã«çŽçµããŸãã
Q4. æ°åãæ€çŽ¢ãããšãã«ã1ããšã10ãã誀èªèãããããšã¯ãããŸãããïŒ
A.
FIND_IN_SETã¯å®å
šäžèŽã®æ€çŽ¢ãªã®ã§ãåºæ¬çã«ã¯ã1ããšã10ãã¯å¥ç©ãšããŠå€å®ãããŸãã
ãã ããæ€çŽ¢å€ãããŒã¿ã«ç©ºçœããã£ã¹ãã®éãããããšãæ³å®éãã«åããªãããšããããŸãã
-- æ£ããäŸ
FIND_IN_SET('1', '1,2,10') -- â 1ïŒ1çªç®ïŒ
-- 誀解ãããã¡ãªäŸ
FIND_IN_SET(1, '1,2,10') -- â åæ§ã«1ïŒOKã ãææ§ïŒ
æšå¥šïŒ åžžã«æååãšããŠæ±ãããã«ããããšã§ãæå³ããªãåäœãé²ããŸãã
Q5. WordPressã§FIND_IN_SETã䜿ããŸããïŒ
A.
WordPressæšæºã®meta_query
ãªã©ã§ã¯FIND_IN_SETã¯äœ¿ããŸãããã$wpdbã䜿ã£ãçŽæ¥SQLçºè¡ã§å©çšå¯èœã§ãã
global $wpdb;
$sql = $wpdb->prepare("
SELECT * FROM {$wpdb->prefix}postmeta
WHERE meta_key = %s AND FIND_IN_SET(%s, meta_value)
", 'your_meta_key', 'æ€çŽ¢å€');
$results = $wpdb->get_results($sql);
ãã ããDBèšèšãã«ã¹ã¿ã ãã£ãŒã«ãã«äŸåããŠããå Žåã¯ã代æ¿ã®æ¹æ³ïŒè€æ°ã¡ã¿ããŒç®¡çãªã©ïŒãæ€èšãã¹ãã§ãã
Q6. JSONåãšã®éãã¯ïŒFIND_IN_SETãã䟿å©ïŒ
A.
MySQL 5.7以éã®JSONåã«ã©ã ã䜿ãã°ãæ§é åãããããŒã¿ãä¿æã§ããJSON_CONTAINS()
ã§æ€çŽ¢ãå¯èœã§ãã
FIND_IN_SETãããç²ŸåºŠã»æ¡åŒµæ§ã»æè»æ§ã«åªããŠããŸãã
-- JSONã§ã®æ€çŽ¢
SELECT * FROM users WHERE JSON_CONTAINS(tags_json, '"python"');
ä»åŸã®èšèšã§ã¯ãFIND_IN_SETããJSONåãåªå ããã®ããã¬ã³ãã§ãã
10. ãŸãšãïŒFIND_IN_SETã¯â䟿å©ãªäŸå€âïœæ§é èšèšãèŠçŽããã£ããã«
ãã®èšäºã§ã¯ãMySQLã®FIND_IN_SET()
颿°ã«ã€ããŠãåºæ¬æ§æããå®çšçãªå¿çšäŸã泚æç¹ãä»£æ¿ææ®µã«è³ããŸã§å¹
åºã解説ããŠããŸããã
äžèŠãããšå°å³ãªé¢æ°ã§ãããæ£ãã䜿ãã°ããŒã¿ããŒã¹éçšã®å¹ ãåºãã匷åãªããŒã«ã§ããããšãããããããã ããããšæããŸãã
FIND_IN_SETã®ç¹åŸŽãæ¯ãè¿ã
ç¹åŸŽ | 解説 |
---|---|
â æè»ãªã«ã³ãåºåãæ€çŽ¢ãå¯èœ | LIKEã§ã¯é£ãããå€åäœã§ã®äžèŽããã§ãã |
â 鿣èŠåãããæ¢åDBã«ã察å¿ãããã | ããŒã¿æ§é ãå€ããã«æ€çŽ¢ããžãã¯ã ãã§å¯Ÿå¿ã§ãã |
â ã€ã³ããã¯ã¹ãå¹ããããã©ãŒãã³ã¹ã«é£ãã | å€§èŠæš¡ããŒãã«ã§ã¯é床äœäžã®åå ã« |
â å ¥åã»ä¿åãã¹ã®åœ±é¿ãåãããã | 空çœãå šè§èšå·ãæ··ãããšäžèŽããªããªã |
䜿çšãã¹ãã±ãŒã¹ãšé¿ããã¹ãã±ãŒã¹
䜿ã£ãŠOKãªå Žé¢ïŒ
- æ€çŽ¢å¯Ÿè±¡ãå°èŠæš¡ãã€çšéãéå®ãããŠãã
- æ¢åã·ã¹ãã ã®æ¹ä¿®ãé£ãããå³æå¯Ÿå¿ãå¿ èŠ
- 管çç»é¢ããããåŠçãªã©ã§äžæçã«å¯Ÿå¿ããã
䜿ãã¹ãã§ãªãå Žé¢ïŒ
- å€§èŠæš¡ããŒã¿ã§æ€çŽ¢éåºŠãæ±ããããå Žé¢
- é »ç¹ã«æŽæ°ã»éèšã»æ¡ä»¶å€æŽãå¿ èŠãªæ¥å
- å°æ¥çãªæ¡åŒµã»ä¿å®ãåæãšããèšèš
FIND_IN_SETã¯â䟿å©ãªäŸå€âãæ¬è³ªã¯èšèšã®èŠçŽãã«ãã
FIND_IN_SETã¯ããããŸã§æ§é çãªå¶çŽããããšãã®åé¿çã§ãã
ããæ°èŠã§ããŒãã«èšèšãè¡ãã®ã§ããã°ã以äžã®2ç¹ããã²æ€èšããŠãã ããã
- ããŒã¿ããŒã¹ã¯æ£èŠåããŠå€å¯Ÿå€ãäžéããŒãã«ã§ç®¡çãã
- æè»æ§ãå¿ èŠãªãJSONåãå°å ¥ããŠæ§é åããŒã¿ãæ±ã
æ¬èšäºããã£ããã«ãFIND_IN_SETã®äœ¿ãã©ãããšéçããããŠãèšèšã®èŠçŽãããããæé©è§£ã§ããããšãåèªèããŠããã ããã°å¹žãã§ãã