1
我对我的代码使用php 5.3。我想按以下格式对数据进行排序。使用postgresql对字母数字顺序的数据进行排序
建筑01 - 101
建筑01 - 150
建筑02 - 100
建筑02 - 105
建筑03 - 099
public static function fetchSortedPropertyUnits() {
$strSql = 'SELECT pu.*,pb.building_name
FROM property_units pu
LEFT JOIN property_buildings pb ON(pu.property_building_id = pb.id)
WHERE pu.management_company_id = ' . $intManagementCompanyId . '
AND pu.property_id = ' . $intPropertyId . '
ORDER BY
COALESCE (CAST (SUBSTRING (pb.building_name FROM \'([a-zA-Z ]{1,26})\') AS VARCHAR), \'\'),
COALESCE (CAST (SUBSTRING (pb.building_name FROM \'([0-9]{1,10})\') AS INTEGER), 0),
COALESCE (CAST (SUBSTRING (pu.unit_number FROM \'([a-zA-Z ]{1,26})\') AS VARCHAR), \'\'),
COALESCE (CAST (SUBSTRING (pu.unit_number FROM \'([0-9]{1,10})\') AS INTEGER), 0),
pb.building_name,
pu.unit_number';
return self::fetchPropertyUnits($strSql, $objDatabase); }
这是我使用的取功能。
&我在我的代码中使用它如下。
$arrobjSortedPropertyUnits = CPropertyUnits::fetchSortedPropertyUnits($this->m_objPropertyUtilitySetting->getManagementCompanyId(), $this->m_objPropertyUtilitySetting->getPropertyId(), $this->m_objClientDatabase);
foreach($this->m_arrobjPropertyUnits as $objPropertyUnit) {
$strUnitNumber = $objPropertyUnit->getUnitNumber();
if(true == valObj($objPropertyUnit, 'CPropertyUnit') && true == $objPropertyUnit->getPropertyBuildingId()) {
$strUnitNumber = $objPropertyUnit->getBuildingName() . ' - ' . $objPropertyUnit->getUnitNumber();
$objPropertyUnit->setUnitNumber($strUnitNumber);
}
}
我想它在正确的顺序排序,如果物业不具备建筑则仅排序它由单元号。对于这个问题,欢迎任何帮助。谢谢。
我很困惑 - 建筑物名称“建筑物01-101”是一个字符串,如果你按第一个数字然后第二个进行排序,并且它们被填充,是不是词典编排呢? –
那些*做*自然顺序排序。请显示您正在使用的*真实*基础数据。尝试http://sqlfiddle.com/。你也忘了包含你的PostgreSQL版本。 –
您可能也觉得这个问题很有用:http://stackoverflow.com/questions/12965463/humanized-or-natural-number-sorting-of-mixed-word-and-number-strings –