AJAX to MySQL запрос WHERE IN ($_GET). Исключить определенные результаты
Когда я нажимаю на флажок "Asus", результат - все модели "Asus" со всеми "размерами", хорошо. Но когда я нажимаю оба флажка "Asus" И "15", в результате получаются все модели такого размера, включая "Acer" и так далее. Как это должно работать (по крайней мере, в моем воображении:)) - нажмите на "Asus" и "15" и получите данные, относящиеся только к нажатым (отмеченным) флажкам.
Спасибо.
Флажки:
<input type="checkbox" name="Acer"> Acer
<input type="checkbox" name="Asus"> Asus
...
<input type="checkbox" name="15.6"> 15''
<input type="checkbox" name="17"> 17''
JQuery / Ajax:
$("input[type=checkbox]").click(function() {
var ids = [];
$("input[type=checkbox]:checked").each(function() {
ids.push($(this).attr("name"));
});
ids = ids.join(",");
$.get("mysql.php", {q: ids},
function(result) {
$("div#output").html(result);
});
});
MySQL запрос:
$g = $_GET['q'];
if(isset($g)) {
$param = "" . str_replace(",", "','", $_GET['q']) . "";
$sql = "SELECT * FROM `notebook` WHERE `trademark` IN ('$param') OR `size` IN ('$param') ORDER BY `trademark`";
$query = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($query)) {
echo '<p>'.$row['trademark'].' = '.$row['size'].'</p>';
}
}
2 ответа
У вас есть 2 параметра для фильтрации результатов, вы должны работать с ними отдельно.
мое предложение:
флажки:
<input type="checkbox" name="trademark" value="Acer"> Acer
<input type="checkbox" name="trademark" value="Asus"> Asus
....
<input type="checkbox" name="size" value="15.6"> 15''
<input type="checkbox" name="size" value="17"> 17''
JQuery:
$("input[type=checkbox]").click(function() {
var trade = [];
var sizes= [];
$("input[type=checkbox]:checked").each(function() {
if($(this).attr("name")=="trademark"){
trade.push($(this).val());
}
else{
sizes.push($(this).val());
}
});
trade = trade.join(",");
sizes= sizes.join(",");
$.get("mysql.php", {q: trade,p: sizes},
function(result) {
$("div#output").html(result);
});
});
MySQL:
$g = $_GET['q'];
$h = $_GET['p'];
$wheresql="";
$where=0;
if(isset($g)) {
$where=1;
$param = "" . str_replace(",", "','", $_GET['q']) . "";
$wheresql.="`trademark` IN ('$param')";
}
if(isset($h)) {
if($where==1){$wheresql.=" AND ";}
$where=1;
$param = "" . str_replace(",", "','", $_GET['p']) . "";
$wheresql.="`size` IN ('$param')";
}
if($where==1){
$sql = "SELECT * FROM `notebook` WHERE ".$wheresql." ORDER BY `trademark`";
$query = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($query)) {
echo '<p>'.$row['trademark'].' = '.$row['size'].'</p>';
}
}
Небольшое объяснение: у вас есть 2 группы флажков, различающихся по имени, и вы работаете с ними отдельно в коде jquery, что позволяет отправлять их в поиск mysql по 2 переменным, а затем в сценарий поиска mysql, для каждой переменной выполните свое "где "чтобы сделать поиск, $where
Переменная имеет 2 цели: сначала добавьте " AND "
к SQL, если есть какие-либо товарный знак и проверенный размер, во-вторых: проверьте, есть ли какие-либо критерии для поиска (если вызываются без параметров, поиск не будет).
Я не проверял код:P
Извините за мой английский
Разве вы не хотите использовать И вместо ИЛИ?
Если вы получаете результаты по всем соответствующим товарным знакам и по всем соответствующим размерам, вам следует использовать AND, которое возвращает результаты только тогда, когда оно соответствует товарному знаку и размеру.