従業員が所属するグループ名に HTML optgroup を使用するドロップダウン メニューを開発しています。MySQL クエリと出力は次のとおりです。
mysql> SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM 従業員は employees.grp_id = groups.grp_id のグループに参加します。 +--------+------------+--------+-----------+ | | emp_id | 従業員名 | grp_id | グループ名 | +--------+------------+--------+-----------+ | | 20 | 従業員 2 | 13 | グループ 1 | | | 19 | 従業員 1 | 13 | グループ 1 | | | 21 | 従業員 3 | 14 | グループ 2 | +--------+------------+--------+-----------+ 3 行セット (0.00 秒)
唯一の問題は、optgroup を正しく機能させる方法を理解するのに最も苦労していることです。数え切れないほど試しましたが、本当にイライラし始めています。以下は、私が出力したいものです(例):
<select name="dropdownmenu">
<optgroup label="Group 1">
<option name="20">Employee 2</option>
<option name="19">Employee 1</option>
</optgroup>
<optgroup label="Group 2">
<option name="21">Employee 3</option>
</optgroup>
</select>
基本的に、optgroup は「groupname」、オプション「name」は「emp_id」、アクション「option」(ドロップダウン項目) は「empname」である必要があります。
これができることを願っていますが、実際にはわかりません。これが私が持っている機能ですが、正確にはうまくいきません:
function getDynGrpList() {
global $db;
// $query = "SELECT * FROM employees ORDER BY grp_id desc;";
$query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;";
$employees = $db->GetAll($query);
$groups = array();
while ($qa = $employees->GetRows()) {
$groups[$qa['groupname']][$qa['grp_id']] = $qa['empname'];
}
foreach ($groups as $label => $opt) { ?>
<optgroup label="<?php echo $label; ?>">
<?php }
foreach ($groups[$label] as $id => $name) { ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php } ?>
</optgroup>
<?php }
中部標準時午前 3 時 15 分 (2/27) の getDynGrpList 関数:
function getDynGrpList() {
global $db;
// $query = "SELECT * FROM employees ORDER BY grp_id desc;";
$query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;";
$employees = $db->GetAll($query);
$groups = array();
while ($qa = $employees->GetRows()) {
$groups[$qa['groupname']][$qa['emp_id']] = $qa['empname'];
}
var_export($groups);
foreach($groups as $label => $opt): ?>
<optgroup label="<?php echo $label; ?>">
<?php foreach ($opt as $id => $name): ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php endforeach; ?>
</optgroup>
<?php endforeach;
}
最終的な解決策 (Felix Kling の助けを借りて)
function getDynGrpList() {
global $db;
$query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;";
$employees = $db->GetAll($query);
$groups = array();
foreach ($employees as $employee) {
$groups[$employee['groupname']][$employee['emp_id']] = $employee['empname'];
}
foreach($groups as $label => $opt): ?>
<optgroup label="<?php echo $label; ?>">
<?php foreach ($opt as $id => $name): ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php endforeach; ?>
</optgroup>
<?php endforeach;
}