使用 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^3
与 1<sup>3</sup>
不同,因此没有 SQL 方法使它们匹配。此外,没有简单的 PHP 代码来声明它们是相同的。
您需要为 "power" 提出规范形式,并将其用于 table 中的数据和搜索字符串。也许您应该选择 "math" 表示来搜索 1^3
。您 可以 使用第二列来表示 HTML 1<sup>3</sup>
.
但是,还有一个问题。 FULLTEXT
索引与 "words" 一起工作,由空格和标点符号分隔。所以其中的单词是 1
、3
和 sup
。
还有更多麻烦...FULLTEXT
默认为 "word" 最少 3 个字母。所以 sup
将是唯一的 "word".
那么,怎么办?如果您可以决定规范形式,请参阅 =
、LIKE
或 REGEXP
进行字符串比较,而不是 FULLTEXT
.
我是新来的。我只有 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^3
与 1<sup>3</sup>
不同,因此没有 SQL 方法使它们匹配。此外,没有简单的 PHP 代码来声明它们是相同的。
您需要为 "power" 提出规范形式,并将其用于 table 中的数据和搜索字符串。也许您应该选择 "math" 表示来搜索 1^3
。您 可以 使用第二列来表示 HTML 1<sup>3</sup>
.
但是,还有一个问题。 FULLTEXT
索引与 "words" 一起工作,由空格和标点符号分隔。所以其中的单词是 1
、3
和 sup
。
还有更多麻烦...FULLTEXT
默认为 "word" 最少 3 个字母。所以 sup
将是唯一的 "word".
那么,怎么办?如果您可以决定规范形式,请参阅 =
、LIKE
或 REGEXP
进行字符串比较,而不是 FULLTEXT
.