如何选择多个值匹配的mysql行

时间:2013-05-30 08:19:09

标签: php mysql

我有一个产品的mysql表,其中添加了超过6个服务(列)。

您可以将这些列视为service1, service2, service3, service4, service5, service6

现在我在页面上显示数据表。要相应地过滤该表,我使用的表单包括每个服务的复选框。

每个复选框都有一个value = "Yes"

现在,当我选择服务并按下提交按钮时,它将刷新页面并传递查询参数,如此

page.php?service1=Yes&service2=Yes&service3=&service4=&service5=Yes&service6=

这里的服务是空白的,这意味着我没有从表单中选择,所以他们在这里空白。如果我选择它们,那么就会有值。

我想选择服务具有“是”值的表行。并忽略那些没有价值的价值。

怎么办?

2 个答案:

答案 0 :(得分:1)

我正在写一个答案,但请在下次询问之前尝试做一些努力:

<强> HTML:

<form name="form" method="get" action="">
    Service 1: <input type="checkbox" name="service1"/><br/>
    Service 2: <input type="checkbox" name="service2"/><br/>
    Service 3: <input type="checkbox" name="service3"/><br/>
    Service 4: <input type="checkbox" name="service4"/><br/>
    Service 5: <input type="checkbox" name="service5"/><br/>
    Service 6: <input type="checkbox" name="service6"/><br/><br/>
    <input type="submit" value="Search" name="submit"/>
</form>

PHP:

if(isset($_GET['submit'])) { // If the form is submitted
    $services = array(); // Define an empty array

    for($i = 1; $i<=6; $i++) {
        if($_GET["service$i"]) { // If Service(x) checkbox is checked
            $services[] = "service$i = 'Yes'"; // Add to array
        }
    }

    if(count($services) > 0) {
        print_r($services); // Here are all choosed services

        $selectQuery = "SELECT * FROM products WHERE " . implode(' AND ', $services) . ";";
        // Take a look what implode function does: http://php.net/manual/en/function.implode.php

        echo $selectQuery; // Now fetch the result using this query
    } else {
        // There is not any service checked. Maybe you can just get all the information from the table in this case.
    }
}

答案 1 :(得分:0)

您的意思是检查您是否要检查某些字段是否为空白,有些字段为“是”?

如果是这样的话: -

<?php

$RequiredVars = array('service1'=>'Yes','service2'=>'Yes','service3'=>'Yes','service4'=>'Yes','service5'=>'Yes','service6'=>'Yes');

$Clause = array();
foreach($_REQUEST AS $Field=>$Value)
{
    if (array_key_exists($Field, $RequiredVars))
    {
        $Clause[] = " $Field = '".mysql_real_escape_string($Value)."' ";
    }
}

$sql = "SELECT * FROM SomeTable ";

if (count($Clause) > 0)
{
    $sql .= "WHERE ".implode(' AND ', $Clause);
}

?>