1

当我点击“华硕”复选框时,结果是所有“华硕”型号的所有“尺寸”,很好。但是当我同时点击“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>';
    }
}
4

2 回答 2

0

您不想使用 AND 而不是 OR 吗?

如果您要获得所有匹配商标和所有匹配尺寸的结果,那么您应该使用 AND,它仅在与商标 AND 尺寸匹配时返回结果。

于 2012-03-12T02:17:36.627 回答
0

您有 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变量有两个目的:首先将" AND "sql 添加到是否有任何商标和尺寸检查,第二:检查是否有任何搜索条件(如果没有参数调用,它不会做搜索)。

我还没有测试过代码:P

对不起我的英语不好

于 2012-03-12T15:48:27.223 回答