1

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

我在数据库中有2个表,

  1. id, name -
    1|热
    2|冷
    3|蠕虫

  2. id, 表 #1 中的 id (1, 3, 4) -
    1|1, 3, ...
    2|2, 3, ...
    3|1, 2, ...

我需要从表 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>";       
    }?>
4

2 回答 2

2

这样做的正确方法是编写一个join已经为您提供所需信息的查询,然后创建下拉列表。永远不要在循环中查询您的数据库!

更多提示:

  • 不要像那样混合 PHP 和标记,在连接的帮助下创建标记,然后将其发送到视图
  • 不要使用错误抑制器@。它会混淆你真正想知道的错误。
  • 不要再使用古老的、不安全的 mysql_* API,而是使用 PDO 和准备好的语句。
于 2012-11-15T16:25:06.927 回答
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

JOIN描述

于 2012-11-15T17:19:36.947 回答