gpt4 book ai didi

mysql - SQL/PHP find_in_set

转载 作者:行者123 更新时间:2023-11-28 23:19:47 25 4
gpt4 key购买 nike

我正在尝试提取表 A (profiles.category) 中的 1 行与表 B (projects.categorysecond) 中的 1 行相匹配的结果,但我没有得到结果。

*重要 projects.categorysecond 将在只有 1 个类别到由 ; 分隔的多个类别之间变化。示例:渥太华或渥太华;多伦多;蒙特利尔或渥太华;蒙特利尔或多伦多;蒙特利尔

profiles.category 将始终只有 1 个类别,永远不会被分隔。

我需要确保无论我在 profiles.category 中有 OTTAWA OR OTTAWA;TORONTO;MONTREAL,只要有 1 个单词匹配,它就会拉取结果。

我目前正在尝试以下查询:

SELECT p.*, up.* FROM users_profiles up INNER JOIN projects p ON find_in_set(up.category, p.categorysecond) > 0

最佳答案

FIND_IN_SET() 只将逗号理解为分隔符。阅读https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

因此您可以将 ; 替换为 , 然后进行比较:

SELECT p.*, up.* 
FROM users_profiles up
INNER JOIN projects p
ON FIND_IN_SET(up.category, REPLACE(p.categorysecond, ';', ',')) > 0

我必须指出,如果您想编写表达式来在分号分隔的字符串中查找单个单词,那么这不是一种存储数据的好方法。参见 my answer to Is storing a delimited list in a database column really that bad?

您应该在 project_categories 表中每行存储一个项目类别。那么你的查询会更容易:

SELECT p.*, up.* 
FROM users_profiles up
INNER JOIN project_categories pc
ON up.category = pc.category
INNER JOIN projects p
ON p.project = pc.project;

使用 project_categories(category,project) 上的复合索引,应该可以很好地优化此查询。

关于mysql - SQL/PHP find_in_set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com