gpt4 book ai didi

mysql - 查询搜索所有可能的单词

转载 作者:行者123 更新时间:2023-11-29 21:13:00 26 4
gpt4 key购买 nike

我需要编写一个 Delphi 7 和 mysql 数据库查询,它将返回包括提交名称中所有单词的记录。因此查询将返回包含所有这些名称单词但可以具有不同顺序的记录。

例如,如果搜索字符串是 John Michael Smith,则查询应该能够返回名称为 John Smith Michael、Michael Smith John、Smith John Michael 或所有这些单词的其他组合的记录。

可以看出,仅返回名称字段中仍包含所有单词但可以具有不同顺序的记录。我不知道如何为我的这种要求编写查询。请帮忙。

procedure Tfrm_Query.Button1Click(Sender: TObject);
var
mask : string;
begin
mask:='''%'+StringReplace(Edit1.text,' ','%',[rfReplaceAll, rfIgnoreCase])+'%''';
if Edit1.Text > '' then
begin
Adosorgulama.Close;
Adosorgulama.SQL.Clear;
Adosorgulama.SQL.Add('SELECT * FROM stok.product');
Adosorgulama.SQL.ADD('Where (P_Name like '+mask+') limit 50');
Adosorgulama.Open;
end;
end;

结果;

edit1.text:='Jo Mich'; // Result Ok!
edit1.text:='Smi Jo Mic'; //No result
edit1.text:='Mich Sm'; // No result

最佳答案

您可以将它们替换为 % AND P_Name LIKE %,而不是用 % 替换空格:

mask:='''WHERE (P_Name LIKE %'+StringReplace(Edit1.text,' ','% AND P_Name LIKE %',[rfReplaceAll, rfIgnoreCase])+'%)''';

如果语法有问题(我不知道 Delphi),抱歉,但如果 Edit1.text:= 'John Michael Smith' 这应该生成以下 WHERE 子句:

WHERE (P_Name LIKE %John% AND P_Name LIKE %Michael% AND P_Name LIKE %Smith%)

它应该找到 P_Name 包含字符串“John”、“Michael”和“Smith”的所有记录。

然后,当然,而不是

Adosorgulama.SQL.ADD('Where (P_Name like '+mask+')  limit 50');

你会做类似的事情

Adosorgulama.SQL.ADD(mask + '  limit 50');

如果输入可能包含无关空格,您需要先删除它们,否则这将不起作用。

如您所知,使用字符串连接形成 SQL 查询可能会使您的应用程序容易受到 SQL 注入(inject)的攻击。我不知道如何用 Delphi 做准备好的语句,所以我无法帮助你。

关于mysql - 查询搜索所有可能的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211875/

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