1

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

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

例子:

用户 1 在其“营地”字段中有:“Camp1 Camp2 Camp3 Camp7”。

用户 2 在其“营地”字段中有:“营地 2”。

用户 3 在“营地”字段中有:“”。

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

这是我到目前为止所拥有的:

$camp = $_POST['camp'];

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

$result = mysql_query($customers);

目前,它似乎只检测“camps”字段内的确切值。如果我通过它“Camp2”,则只有用户 2 会显示。我想让用户 1 和用户 2 显示。我究竟做错了什么?

4

3 回答 3

2

您缺少另一个通配符。请记住,您还需要匹配在搜索词之后有其他文本的内容。找到 User2 是因为“Camp2”是 camps 字段中的最后一项。

$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);
于 2012-05-31T02:22:32.097 回答
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))$";

阅读有关模式匹配的 MySql 文档以获取更多信息

obs:注意使用 mysql_real_escape_string 就像Okonomiyaki3000说的那样。

于 2012-05-31T02:56:38.773 回答
0

您的 where 子句应该是:

where camps like '%Camp2%'

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

于 2012-05-31T02:35:45.347 回答