使用来自两个mysql查询的数据填充select下拉列表

时间:2015-02-01 19:27:29

标签: php mysql

我确信很容易弄清楚大多数知道PHP和mysql的人,但我无法弄明白。我会尽力以最好的方式解释

如果我错过了什么,请告诉我

相关表格结构

Table | Fields
category | id,group_n (more fields exist but are not required now)
p_group | id,group_n

我想要实现的目标:

根据与该类别相关的_get URL中的当前_isset id,查询在类别表中查找当前选定的group_n字段(如果可用)。

工作流程示例:

类别

的示例行
ID | category             | short     | group_n
1  | Skin Whitening Pills | pills     | Skin Whitening
2  | Skin Whitening Cream | cream     | Skin Whitening
3  | Weight Gain / Loss   | wgainl    | Weight Gain / Loss

如您所见,多个类别可以包含一个group_n。我使用group_n来显示该组的专家。

  1. 选择选项使用类别
  2. 中的字段group_n填充
  3. 选择选项使用p_group中的所有选项填充(除非已选中,因此没有重复“
  4. id为2的类别将group_n作为Skin Whitening edit_category.php?id = 2将显示当前在表行中的id 2的所有输入选项,以便编辑它们并更新查询。现在,当填充group_n的选项时,所选的应该是Skin Whitening,但是p_group中的所有行都可以选择。

    <?php
    $qry=mysql_query("SELECT group_n from category where id=$id", $con);
    if(!$qry)
    {
    die("Query Failed: ". mysql_error());
    }
    
    ?>
    
    <select name="group" id="group">
        <?php
        // First, define the desired default value
        $default_value = $row['group_n'];
        while($row=mysql_fetch_array($qry))
        {
            // Then you can mark that one as selected in your "while" loop
            $selected = ($row['group_n'] == $default_value) ? ' selected' : '';
    
                    $qry2=mysql_query("SELECT * from p_group", $con);
    
        while ($row2 =  mysql_fetch_array($qry2))
            {
                        echo "<option value='" . $row2['group_n'] . "'" . $selected . ">" . $row2['group_n'] . "</option>";
            }
    
    
        }
        ?>
    </select>
    

    我还尝试使用单个查询来连接两个表,但以下查询将仅列出一行不会自动填充但提供正确值的行。

    $qry=mysql_query("
    SELECT a.group_n,
    b.group_n from p_group a 
    left join category b
    on a.group_n=b.group_n
    group by b.group_n where b.id=$id", $con);
    

    我不确定我的查询是需要更改还是php,但我只能让其中一个查询一次使用select。我需要知道如何使两个查询都能正常工作,因此所选的选项是类别表中的一个选项和p_group表中的下拉选项。

    理想情况下,我希望类别表与p_group中的id相关联,但是现在我决定将其保留为文本。

1 个答案:

答案 0 :(得分:1)

在等待本周异常安静的用户社区的输入之后,我搜索了周围的代码,直到我来到UNION sql join。这基本上需要两组数据并呈现为一个完成技巧的数据。不确定这是否是最好的方式,也许有一种纯粹的PHP方式,但这就行了。

SQL代码段

   $qry=mysql_query("select group_n as group_a from category where id=$id union select group_n from p_group group by group_n", $con);

基本上,这将选择左边的查询,右边的查询并显示所有记录。

限制 1.所选的字段数必须匹配 2. UNION将不会选择重复项 3. UNION ALL将选择重复

完整相关代码:     

   $qry=mysql_query("select group_n as group_a from category where id=$id union select group_n from p_group group by group_n", $con);
if(!$qry)
{
die("Query Failed: ". mysql_error());
}
    // First, define the desired default value
    $default_value = $row['group_a'];
    while($row=mysql_fetch_array($qry))
    {

$selected = ($row['group_a'] == $default_value) ? ' selected' : '';

        // Then you can mark that one as selected in your "while" loop
     echo "<option value='" . $row['group_a'] . "'" . $selected . ">" . $row['group_a'] . "</option>";


 }   
?>
</select>