来自2个mysql表的动态下拉列表

时间:2012-11-15 16:16:47

标签: php mysql sql database drop-down-menu

我希望创建一系列从MYSQL数据库填充的下拉框。

我在数据库中有2个表,

  1. id,name -
    1 |热
    2 |冷
    3 |蜗杆

  2. id,来自表#1(1,3,4)的ids -
    1 | 1,3,...
    2 | 2,3,...
    3 | 1,2,...,

  3. 我需要从表2中选择记录,并使用表1中的名称创建下拉菜单。

    我使用以下代码创建下拉列表,但它只显示一个下拉列表并停止。

    非常感谢任何帮助

        <?php
        $getRss = mysql_query("SELECT * FROM optionals_groups where resid=".$_SESSION['restaid']." order by id asc");
        while ($rss = @mysql_fetch_array($getRss)) { ?>
        <select name="a_<?=$rss['id']?>" id="a_<?=$rss['id']?>" >
          <option value="1" >Select Options</option>
          <?php
            $ot=0;
            $last_ot="";
            $goptionals=explode(', ',($rss['goptionals']));  
        $getRss= mysql_query("SELECT * FROM optionals order by id asc");
            while ($rsso = mysql_fetch_array($getRss)) {
                if (in_array($rsso['id'],$goptionals)) {
                    $ot++;
                    $last_ot=$rsso['optional'];    
        ?>
          <option value="<?=$rsso['id']?>" ><?=$rsso['optional']?></option>
          <?php 
          } 
        }
        ?>
        </select>
        <br />
        <?php } ?>
    

    更新

    这是我到目前为止的地方。我能够使用表2创建下拉列表,我需要弄清楚如何从表1中获取表2中列出的每个id的名称。

    我觉得加入的东西会起作用,但不太确定。

    有什么想法吗?

        <?php
          $getRss = mysql_query("SELECT * FROM optionals_groups where       resid=".$_SESSION['restaid']." order by id asc");
        while ($rsr = @mysql_fetch_array($getRss)) {
        $goptionals=explode(', ',($rsr['goptionals']));
    
    echo "<select name='a_".$rsr['id']." id='a_".$rsr['id']."' >";
    echo "<option value='1' >Select Options</option>";
        foreach($goptionals as $v)
        {
            echo "<option value=".$v." >".$v."</option>";
        }
             echo "</select><br>";       
        }?>
    

2 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是编写join查询,该查询已获取所需的所有信息,然后创建下拉列表。永远不要在循环内查询数据库!

更多提示:

  • 不要混用PHP和这样的标记,在连接的帮助下创建标记,然后将其发送到视图
  • 请勿使用错误抑制器@。它会模糊你真正想知道的错误。
  • 不要再使用古老的,不安全的mysql_ * API,而是将PDO与预备语句一起使用。

答案 1 :(得分:0)

在您的示例中,INNER JOIN在两个表中至少有一个匹配时返回行(id)

INNER JOIN的语法是

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

请参阅description of JOIN