SQL MATCH无法正确匹配

时间:2014-05-15 12:54:23

标签: php mysql

我有3个表,我已将它们连接在一起,工作正常,它可以提取信息。其中一个表作为列中的数组,在每一行上,如:

["Pets","Schools","Shops"]

我需要在选择时,在MATCH AGAINST变量时拉出查询。这是我的代码:

$searchRefine = '';
foreach( $refineAmen as  $key => $val) {
    $searchRefine = $searchRefine . " MATCH(pa.Property_Amenities) AGAINST ('".$val."' IN BOOLEAN MODE) OR ";
}

上面从行/列中获取数组中的每个var,并将其添加到子查询字符串中。

$searchRefine = substr($searchRefine, 0, -3);

以上取出最后3个(或“OR”一词),因为它不需要

$detail = "SELECT  p.*, pi.*, pa.*  FROM  tbl_property p LEFT join tbl_property_images pi on p.Property_Id = pi.Property_Id LEFT join tbl_property_amenities pa on pi.Property_Id = pa.Property_Id WHERE (p.Property_Postcode='" . $_POST['cust_id'] . "' OR p.Property_City Like '%" . $_POST['cust_id'] . "%') AND ( " . $searchRefine. " ) GROUP BY pi.Property_Id";

以上采用子字符串并将其添加到最终用于触发。我没有任何错误。

问题是,它不会在行中的任何这些关键作品中拉出记录,只有一个。我已尝试过多种AND或OR组合,因此查询可以理解。但仍然没有运气。有人看着这个,看看他们是否能看出我做错了什么。

由于

1 个答案:

答案 0 :(得分:0)

您应该规范化数据库结构,而不是在一列中存储多个值。这样,您就不必使用MATCH...AGAINST计算全文搜索的子查询字符串。 你能展示你的数据库结构吗?

小心SQL注入。一旦你的查询工作,你应该改变它以逃避客户端数据或使用预准备语句。