我想提出一個過濾系統,我有三個表:過濾結果與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);
如果是我,我暫時忘記所有非MySQL的東西,只關注SQL。提供適當的CREATE和INSERT語句和期望的結果 – Strawberry
您是否嘗試過echo $ sql;在執行之前。 AND是$ filters數組存儲您傳遞的複選框的值? – Nithee
它正確執行,但最終結果不是我所需要的。最終的結果是ProductsData不斷變化,但我需要ProductId,ProductName和與此ProductId相關聯的所有FilterIds –