如何使用WHERE和OR选择DISTINCT

时间:2014-11-15 11:59:35

标签: php mysql select

我是php的新手,我搜索了谷歌,其他论坛,这个网站并查看了几本书,但看不出怎么做。请不要因我的无知而鞭挞我。我想根据另一个字段(代码)中的条件从字段(类别)中选择不同的条目,然后显示包含不同类别的下拉列表。名为“code”的字段包含三个数据值中的一个,即1,2或4.我只想在代码字段为“2”或“4”时选择不同的类别,但如果包含值为' 1' 。

我已经尝试了几种方法,但我只是得到一个确认数据库连接使用它下面没有内容的下拉框。

经过多次试验,我目前的代码是:

if ( ! $_POST['submit'] )
    {
        // form not submitted, so display form to get input from user

        echo '<form method="post" id="form_id" action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">';
        try {
        $dbh = new PDO("mysql:host=$hostname;dbname=gosdirect", $username, $password);
        $code2 = '2';
        $code4 = '4';
        $sql = $dbh->prepare("SELECT DISTINCT category FROM directory WHERE code =$code2 OR code =$ode4     ORDER BY category ASC");
        $sql->execute();
        // display message if connection is OK
        echo ' Connected to database<br />';
        echo 'I am looking for local: <select name="category">';
        while ($row = $sql->fetch(PDO::FETCH_ASSOC))
        {
        $category = $row['category'];
        echo '<option value="' . $category . '">' . $category . '</option>';
        }
        echo '</select>';
        // close the database connection
        $dbh = null;
        }
        catch(PDOException $e)
        {
        echo $e->getMessage();
        }
        echo '<input id="form_submit" type="submit" name="submit" value="search" /></form>';
        ?>

如果我只使用这行:

$sql = $dbh->prepare("SELECT DISTINCT category FROM directory ORDER BY category ASC");

我确实得到了填充了类别名称的下拉框,但是它还包含“代码”字段中值为“1”的类别,我不希望这样,所以我假设有一些东西我的'SELECT请求基本上是错误的。

以下是我得到的图片:

screen shot http://www.wigweb.biz/gosport-error.jpg

我将不胜感激。

非常感谢

Tog Porter

3 个答案:

答案 0 :(得分:3)

匹配包含2或4的代码,并排除其中包含1的代码

SELECT DISTINCT category 
FROM directory 
Where (code like '%2%' or code like '%4%') and not  (code like '%1%')
ORDER BY category ASC

另外,如果你想在sql中使用一个varchar字段的变量,用'$code2'

引用它

答案 1 :(得分:1)

您在这里输入错误:code =$ode4,它应该是code = $code4并且不要忘记在'周围$code2附近包含引号($code4) 1}}因为code字段是varchar

$sql = $dbh->prepare("SELECT DISTINCT category FROM directory WHERE code = '$code2' OR code = '$code4'     ORDER BY category ASC");

答案 2 :(得分:0)

尝试以下代码:

$sql = $dbh->prepare("SELECT DISTINCT category FROM directory WHERE code != 1 ORDER BY category ASC");

希望这会奏效。日Thnx