gpt4 book ai didi

mysql - 在具有多个字符串的记录中搜索字符串的一部分

转载 作者:行者123 更新时间:2023-11-29 12:08:51 25 4
gpt4 key购买 nike

我在artists表中有以下记录:

| id | names                |

| 1 | eminem rihanna rita ora|
| 2 | taylor swift beyonce |

我想使用 inem 进行搜索,并且希望找到此记录的 id,其中 id = 1案件。我正在使用MySQL 中的全文搜索

是否有更好的技术来实现这一目标?

更新:

 | id | video_name | title  | artists | search_tags       | 
| 1 | onajr | o'najr | kida | onajr o'najr kida |

我想使用这个字符串来搜索 ex。 onajr,ona,kida,kid。因此,用几句话,用户就可以使用所有搜索标签(包括标签的一部分)进行搜索。

这是我在 php.ini 中的函数。 :

public function tags_search() {
//echo 'ok';
$db = DB::get_instance();
//single word

$query = "
select * from `videos`
where
match(`search_tags`) against (':video_name' IN BOOLEAN MODE) order by rand()
limit 1
";
try {
$run_query = $db->prepare($query);
$run_query->execute(array(
':string' => $this->string
));

return ($run_query->rowCount() == 1) ? $run_query->fetch(PDO::FETCH_OBJ)->video_name : false;
} catch(PDOException $e) {
echo $e->getMessage();
}
}

最佳答案

您应该能够使用LIKE

SELECT id FROM artists WHERE names LIKE '%inem%';

% 是通配符,表示任何内容都可以出现在它们之前或之后。

此外,在单个字段中存储多个值通常不是一个好主意。我建议将 idnames 制作为一个复合 PK,然后每个字段只有一个名称。

例如)

| id | name         |

| 1 | eminem |
| 1 | rihanna |
| 1 | rita ora |
| 2 | taylor swift |
| 2 | beyonce |

如果您计划添加更多字段,它们应该位于另一个表中。了解 database normalization究其原因。

更新后编辑:

我仍然认为 LIKE 语句适合您的目的,您唯一需要做的不同就是添加 AND search_tags LIKE '%ona%' 等每个逗号划定标记词。

正如上面的示例:

SELECT id FROM artist 
WHERE search_tags LIKE '%onajr%'
AND search_tags LIKE '%ona%'
AND search_tags LIKE '%kida%'
AND search_tags LIKE '%kid%';

我对 PHP 的了解还不够,无法为您提供一些代码,但经过短暂搜索后,explode()似乎是您想要查看的功能。然后只需为每个搜索标签附加额外的 SQL。如果您要将标签拆分到另一个表中,此方法也适用。如果我没记错的话,如果你走那条路,你应该只需要按歌曲 ID 进行分组即可。

不确定这一切是否比您拥有的更好。正如我所说,我不太了解 PHP,也没有搞过 match(...) against(...),但我想我应该加入我自己的2美分。

关于mysql - 在具有多个字符串的记录中搜索字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036944/

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