我有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组合,因此查询可以理解。但仍然没有运气。有人看着这个,看看他们是否能看出我做错了什么。
由于
答案 0 :(得分:0)
您应该规范化数据库结构,而不是在一列中存储多个值。这样,您就不必使用MATCH...AGAINST
计算全文搜索的子查询字符串。
你能展示你的数据库结构吗?
小心SQL注入。一旦你的查询工作,你应该改变它以逃避客户端数据或使用预准备语句。