2016-09-22 302 views
1

对于我的php sql搜索查询,我有5个不同的搜索条件(从最重要到最不重要)。PHP查询多个搜索

例如:

  1. (最重要的):命名
  2. 区域
  3. 颜色
  4. 形状
  5. (最重要的):时间

对于查询,我有以下几种:

$ajax_data = $_POST['data']; 
$name  = $ajax_data [0]; 
$area  = $ajax_data [1]; 
$color  = $ajax_data [2]; 
$shape  = $ajax_data [3]; 
$time  = $ajax_data [4]; 

$option = "WHERE name = '$name' AND area = '$area' AND color = '$color' AND shape = '$shape' AND time = '$time'"; //Not complete 
$query = "SELECT * FROM $table $option limit 10; 

这里就是我要做的。

使用5个标准(名称,面积,颜色,形状和时间),我想要做一个查询搜索,找到最相关的数据,这意味着它应该匹配的最佳结果的搜索条件。

例如,下列搜索条件经由AJAX发送:

Ajax search criteria: Earth, Canada, White, Square, Today 

然后,我想要做的相同条件的查询搜索。

但是,有些情况下相同的数据不存在。

在它不,我想删除最不重要的标准和做其他的搜索和场景等,直到我有10个结果。

任何建议如何我可以写这个查询?

+1

显然他不知道PDO的问这个问题在这里。不需要居高临下。 – HEYHEY

回答

1

你能尝试这样的方法,你在保持匹配的数量的轨道表建立一个数字字段,然后降序排列在这一领域,并在随后的结果应用限制?

道歉的伪代码,它应该足够给你的想法。

$option = "WHERE name = '$name' AND area = '$area' AND color = '$color' AND shape = '$shape' AND time = '$time'"; //Not complete 
$order = "ORDER BY matchQuality DESC"; 


$query = "SELECT *, IF(name = '$name', 1, 0) + IF(area = '$area', 1, 0) + IF(color = '$color', 1, 0) + IF(shape = '$shape', 1, 0) + IF(time = '$time', 1, 0) matchQuality FROM $table $option $order limit 10;"; 

让我知道你是否有任何进一步的要求。

问候,

詹姆斯

+0

谢谢詹姆斯!我明白了,并会试一试!欣赏它! –

+0

快乐史蒂夫! –