php mysql select下拉列表已选择且不同的查询

php mysql select下拉列表已选择且不同的查询,php,mysql,Php,Mysql,我在这里感到困惑 $sql_n = mysql_query("SELECT * FROM table1 WHERE n='{$row['n']}'"); $row_n = mysql_fetch_array($sql_n); $sql= mysql_query("SELECT DISTINCT p FROM table1"); while($row = mysql_fetch_array($sql)) { if($row['p'] == $row_n['p']) {

我在这里感到困惑

$sql_n = mysql_query("SELECT * FROM table1 WHERE n='{$row['n']}'");
$row_n = mysql_fetch_array($sql_n);

$sql= mysql_query("SELECT DISTINCT p FROM table1");
while($row = mysql_fetch_array($sql)) { 

    if($row['p'] == $row_n['p']) {
        $selected = " selected"; 
    }

    $np .= "<option value='{$row['p']}'$selected>{$row['p']}</option>"; 
}

当我使用queryselectdistinct p时,$selected不起作用,但是如果我使用selectp。它可以工作,知道为什么吗?

不使用PHP,但是知道引擎有时会如何组成列名如果你没有明确暗示as列名,它可能会使用不同的

选择DISTINCT p作为DISTINCT\u p

因此,结果查询中的列名p不存在

你可能想试试

选择不同的p


因此,隐含的结果列名是p,并限定例程的其余部分。

我的第一反应是,解决问题的方法是在第一个查询中也添加DISTINCT

我认为这是一个问题,现在我不认为是这个问题。。。但是,您的$selected变量。直到实际的

if($row['p'] == $row_n['p']) { 
        $selected = " selected";  
    } 
您可能需要将此项设置为其他项并进行设置

$selected=


因此,它不会是一个不存在的变量,当您在构建选项列表时试图在下面的字符串构建中包含它时,它会失败。

第一个查询中的$row['n']来自何处?这是另一个while循环的一部分吗?如果是这样,您将覆盖$row变量。$selected除了查询问题外将无法正常工作。一旦有1个匹配项,以下所有项都将标记为选中。另外,$selected should be selected='selected'尝试打印一行,查看从数据库中获得的每一行中都有什么内容。我测试过,所有变量都是正确的,只有在添加DISTINCT时才会发生。