使用 PHP 搜索包含 1<sup>3</sup> + 2<sup>2</sup> 等表达式的 Mysql 数据库

Searching Mysql database containing expression like 1<sup>3</sup> + 2<sup>2</sup> using PHP

我是新来的。我只有 PHP 和 Mysql 的基础知识。

我的数学表达式如下:

[13 + 24 + 92 - x1x2]

存储在 MySQL 数据库中为:

[1<sup>3</sup> + 2<sup>4</sup> + 9<sup>2</sup> - x<sub>1</sub>x<sub>2</sub>].

我想使用输入字符串 $str='1^3 + 2^4 + 9^2 - x_1x_2'; 从 MySQL 数据库中搜索该列。 MySQL 列设置为全文索引,因此我需要使用 MATCH AGAINST 方法对其进行搜索。

更新:我在下面的应用程序中添加了相关代码。

我的问题是为什么 MySQL 查询返回 0。即使我更改输入字符串也会发生同样的事情。喜欢

$str=$_GET['search']; //$_GET['search'] is equal to '1<sup>3</sup> + 2<sup>4</sup> + 9<sup>2</sup> - x<sub>1</sub>x<sub>2</sub>'
//the $str contain the search string
$query = "(Select col1,col2,MATCH (col3) AGAINST ('".$str."' IN NATURAL LANGUAGE MODE) AS relevance from table_name WHERE MATCH (col3) AGAINST ('".$str."' IN NATURAL LANGUAGE MODE))";
$run = mysqli_query($connect, $query);
 $foundnum = mysqli_num_rows($run);
//$foundnum returning  0

由于字符串 1^31<sup>3</sup> 不同,因此没有 SQL 方法使它们匹配。此外,没有简单的 PHP 代码来声明它们是相同的。

您需要为 "power" 提出规范形式,并将其用于 table 中的数据和搜索字符串。也许您应该选择 "math" 表示来搜索 1^3。您 可以 使用第二列来表示 HTML 1<sup>3</sup>.

但是,还有一个问题。 FULLTEXT 索引与 "words" 一起工作,由空格和标点符号分隔。所以其中的单词是 13sup

还有更多麻烦...FULLTEXT 默认为 "word" 最少 3 个字母。所以 sup 将是唯一的 "word".

那么,怎么办?如果您可以决定规范形式,请参阅 =LIKEREGEXP 进行字符串比较,而不是 FULLTEXT.