如何在MySQL TEXT数据类型中搜索一个单词?

时间:2012-05-31 02:14:59

标签: php mysql

目前我的“客户”表中有一个名为“camps”的TEXT字段,可以容纳多个单词。 每个用户在字段内可以有0到50个单词(由空格分隔。)

我正在尝试搜索每一行的每个“阵营”字段,以确定哪个用户在其“阵营”字段中有某个字词。

示例:

用户1在他们的“营地”中拥有:“Camp1 Camp2 Camp3 Camp7”。

用户2在他们的“阵营”字段中有“Camp2”。

用户3有:''在'营地'字段。

假设我搜索Camp2的所有人,我希望它确定User1和User2在他们的“阵营”字段中有Camp2。

这是我到目前为止所做的:

$camp = $_POST['camp'];

$customers = "SELECT * FROM customers WHERE camps LIKE '%$camp'";

$result = mysql_query($customers);

此刻它似乎只是在“阵营”字段中检测到确切的值。如果我通过它“Camp2”,只有用户2会显示。我希望用户1和用户2显示。我做错了什么?

3 个答案:

答案 0 :(得分:2)

你错过了另一张通配符。请记住,您还需要在搜索字词之后匹配包含其他文本的内容。 User2被发现是因为“Camp2”是阵营领域的 last 项目。

$customers = "SELECT * FROM customers WHERE camps LIKE '%$camp%'";

...或者如果你想让它更容易阅读:

$customers = "SELECT * FROM customers WHERE camps LIKE '%" . $camp. "%'";

......或者甚至是:

$sqlfmt = "SELECT * FROM customers WHERE camps LIKE '%%%s%%'";
...
$customers = sprintf($sqlfmt, $camp);

答案 1 :(得分:1)

你可以在字符串的末尾使用另一个通配符来注意你正在搜索任何有“camp”的东西,例如:

$customers = "SELECT * FROM customers WHERE camps LIKE '%mysql_real_escape_string($camp)%'";

或者,如果您想要做一些更复杂的事情,可以使用REGEXP。 (另)

$customers = "SELECT * FROM customers WHERE camps REGEXP '^(mysql_real_escape_string($camp))$";

阅读pattern matching上的MySql文档以获取更多信息

obs :注意使用像Okonomiyaki3000这样的mysql_real_escape_string。

答案 2 :(得分:0)

你的where子句应该是:

where camps like '%Camp2%'

您可以通过连接将Camp2替换为变量。