【问题标题】:Dynamic dropdown lists from 2 mysql tables来自 2 个 mysql 表的动态下拉列表
【发布时间】:2012-11-15 16:16:47
【问题描述】:

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

我在数据库中有 2 个表,

  1. id,名字 -
    1|热门
    2|冷
    3|蠕虫

  2. id,表 #1 (1, 3, 4) 中的 id -
    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 获取名称。

我觉得有 join 的东西可以完成这项工作,但不太确定。

有什么想法吗?

    <?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>";       
    }?>

【问题讨论】:

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


    【解决方案1】:

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

    更多提示:

    • 不要像这样混合 PHP 和标记,在连接的帮助下创建标记,然后将其发送到视图
    • 不要使用错误抑制器@。它会混淆您真正想知道的错误。
    • 不要再使用古老的、不安全的 mysql_* API,而是使用带有准备好的语句的 PDO。

    【讨论】:

    • 感谢 markus-tharkun 的提示。我是 php/mysql 的新手,还在学习……我希望我可以编写连接查询,但我会尝试。
    【解决方案2】:

    在您的示例中,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

    【讨论】:

      猜你喜欢
      • 2012-11-17
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      • 2010-11-22
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多