0

我有一个名为 empicons 的表,它有两列:EmpNo,IconId

我将 EmpNo 存储为名为 $EmpNo 的会话

我有另一个名为图标的表,它有 3 列:ID、名称、URL

目前我有一个记录集,它选择图标表 Id 和名称并将其显示在一个多选框中,然后更新 empicons 表。

记录集查询:SELECT id, name FROM gbl_icons ORDER BY id ASC

多选表单元素:

<select name="icons[]" size="10" multiple="multiple">
            <?php
do {  
?>
            <option value="<?php echo $row_icons['id']?>"><?php echo $row_icons['name']?></option>
            <?php
} while ($row_icons = mysql_fetch_assoc($icons));
  $rows = mysql_num_rows($icons);
  if($rows > 0) {
      mysql_data_seek($icons, 0);
      $row_icons = mysql_fetch_assoc($icons);
  }
?>
          </select>

我正在尝试使用 empicons 和 icons 表进行连接,以便多重选择突出显示基于 EmpNo 变量的 empicons 中找到的数据元素。我无法让连接正常工作,然后更新表单元素以突出显示这些。

4

2 回答 2

2

尝试这个。它使用mysqli_函数。如果您在JOIN处理这两个表时遇到问题,那么我们需要处理您的查询。

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT id, name FROM gbl_icons ORDER BY id ASC";

echo '<select name="icons[]" size="10" multiple="multiple">';

if ($result = mysqli_query($link, $query)) {
    /* fetch associative array */
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<option value="' . $row[id] . '">' . $row[name] . '</option>';
    }

    /* free result set */
    mysqli_free_result($result);
}

echo '</select>';

/* close connection */
mysqli_close($link);
?>
于 2013-03-20T16:04:23.057 回答
1

您的查询应该是这样的

SELECT i.id, i.name, e.EmpNo FROM gbl_icons i
LEFT JOIN empicons e ON e.IconId = i.id AND e.EmpNo = '$EmpNo'
ORDER BY i.id ASC

因此,您将从“gbl_icons”表中获取所有图标,并为每个图标获取当前 EmpNo 的 empicons 中的相应记录。如果没有相应的记录,您将在“EmpNo”列中获得 NULL。

你的代码应该是这样的

<select name="icons[]" size="10" multiple="multiple">
<?php
while($row_icons = mysqli_fetch_assoc($icons)) {  
?>
<option value="<?=$row_icons['id']?>" <?=!empty($row_icons['EmpNo']) ? ' selected="selected"' : ''?><?=$row_icons['name']?></option>
<?php
}
?>
</select>
于 2013-03-20T16:18:42.840 回答