2016-07-06 79 views
0

我想提出一個過濾系統,我有三個表:過濾結果與PHP和AJAX

產品:產品編號,CATID,SubCatId,產品名稱,產品描述
過濾器:FilterId, FilterName
ProductsData:ProductDataId,ProductId,FilterId,ProductDataEN(包含過濾器的值,在我的情況是「開」 這意味着該過濾器被選中用於此特定產品)

我有腳本可以過濾信息,但問題是sript現在只從ProductsData獲取數據,而返回的結果是JSON,其中包含每個過濾器值的每個表的所有信息(ProductsData)產品。請記住,一個產品可以有多個過濾器,因此ProductsData與產品不匹配。
我發佈過濾的js代碼和mysql查詢的php代碼。
我的qiestion是如何將所有表和結束JSON組合成帶有過濾器(不僅僅是過濾器)的產品列表。

JavaScript代碼:

function makeItem(data){ 
    var tbl_body = ""; 
    $.each(data, function() { 
     var tbl_row = ""; 
     tbl_row += "<div class='subCatName'>"+this.FilterId+"</div>"; 
     tbl_row += "<div class='subCatText'>"+this.ProductId+"</div>"; 
     tbl_body += "<div class='categoryWrap'>"+tbl_row+"</div>"; 
    }) 
    return tbl_body; 
} 

function getChecks(){ 
    var checks = []; 
    $checkboxes.each(function(){ 
     if (this.checked) { 
      checks.push(this.name); 
     }; 
    }) 
    return checks; 
} 

function update(checks){ 
    $.ajax({ 
     type: "POST", 
     dataType : "json", 
     url: 'submit.php', 
     data: {checkOptions : checks}, 
     success: function(records){ 
      $('.subcategories').html(makeItem(records)); 
     } 
    }) 
} 

var $checkboxes = $("input:checkbox"); 
$checkboxes.on("change", function(){ 
    var checks = getChecks(); 
    update(checks); 
}); 

update(); 

PHP代碼:

$select = "SELECT *"; 
$from = " FROM ProductsData"; 
$where = " WHERE TRUE "; 
$checks = isset($_POST['checkOptions'])? $_POST['checkOptions'] : array(''); 

foreach ($filters as $key => $filter) { 
    if (in_array($filter['nameBG'], $checks)) { 
    $where .= "AND FilterId = $filter[id]"; 
    } 
} 
$sql = $select . $from . $where; 
$statement = $db -> query($sql); 

while($row = $statement -> fetch_assoc()) { 
    $json[] = $row; 
} 
$json1 = json_encode($json); 
echo($json1); 
+0

如果是我,我暫時忘記所有非MySQL的東西,只關注SQL。提供適當的CREATE和INSERT語句和期望的結果 – Strawberry

+0

您是否嘗試過echo $ sql;在執行之前。 AND是$ filters數組存儲您傳遞的複選框的值? – Nithee

+0

它正確執行,但最終結果不是我所需要的。最終的結果是ProductsData不斷變化,但我需要ProductId,ProductName和與此ProductId相關聯的所有FilterIds –

回答

0

Loop through checkboxes and count each one checked or unchecked 功能更新(檢查){ $就({ VAR信息= 'ID =' + checkOptions; 類型:「POST」, dataType:「json」, url:'submit.php', data:info, 成功:function(records){('。subcategories')。html(makeItem(records)); }} )

  foreach ($filters as $key => $filter) { 
       if (in_array($filter['nameBG'], $checks)) { 
       $where .= "AND FilterId IN($_REQUEST['id'])";// this id comes from info variable and IN Operator since there will be multiple checkbox value must be [5 or 5,6 this will be checkbox value ] 
       } 
      } 
      } 

希望這將有助於。