2016-09-22 528 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

快樂史蒂夫! –