我正在尝试重写此代码,以便下拉菜单按字母顺序排列:
$activeProjectDropdown.="<option value=''>Select Project</option>";
$getInfo = "SELECT id, customer, job_name, haul_info
FROM dispatch_jobs
WHERE (:mydate BETWEEN delivery_date AND delivery_date_end)
ORDER BY customer, job_name";
$result=DB::run($getInfo, ['mydate' => $myDate]);
while($row=$result->fetch(PDO::FETCH_BOTH)) {
if(!empty($row['haul_info'])) {
$haulinfo = "($row[haul_info])";
}else{
$haulinfo = "";
}
if($checkit == $row['id']){
$woot = 'selected=selected';
}else{
$woot = '';
}
$customerName = pdo_getName('name', 'customer', "$row[customer]");
$activeProjectDropdown.="<option value='$row[customer]|$row[id]' $woot>$customerName $haulinfo</option>n";
}
在此代码中,查询从数据库中返回一些行,其中 customer 是一个数字代码,它不按任何字母顺序排列。 在代码的更下方,调用一个名为pdo_getName
的函数,该函数从$row['customer']
中获取customer
name
表和 id 的列并查询数据库,返回客户的字符串化名称。 因为直到稍后循环才检索到该名称,所以我很难找到一种可以按字母顺序排列$activeProjectDropdown
的方法。 我尝试将$customerName
和下拉代码放入关联数组中,然后按$customerName
排序并将所有内容连接成一个字符串,但这不起作用,因为存在重复键。 沿着同样的路径,我可能会有一个嵌套数组,但我认为一定有一个更简单的解决方案,我错过了。 感谢您的帮助!
编写一个 JOIN 查询并在一个查询中获取所有数据,然后您可以按照我认为您要求的那样对客户名称进行排序。
这将提高性能并简化代码。
$getInfo = "SELECT dj.id, dj.customer, dj.job_name, dj.haul_info
c.name
FROM dispatch_jobs dj
LEFT JOIN customer c ON c.id = dj.customer
WHERE (:mydate BETWEEN dj.delivery_date AND dj.delivery_date_end)
ORDER BY c.name, dj.job_name";
$result=DB::run($getInfo, ['mydate' => $myDate]);
while($row=$result->fetch(PDO::FETCH_BOTH)) {
if(!empty($row['haul_info'])) {
$haulinfo = "($row[haul_info])";
}else{
$haulinfo = "";
}
if($checkit == $row['id']){
$woot = 'selected=selected';
}else{
$woot = '';
}
$activeProjectDropdown.="<option value='$row[customer]|$row[id]' $woot>$row[name] $haulinfo</option>n";
}
试试这个:
SELECT ... ORDER BY customer ASC, job_name
这将首先按客户(升序(对所有内容进行排序,然后在两行或更多行的客户字段相等时按job_name(升序,这是默认值(对所有内容进行排序。
更多信息在这里