Я использую php 5.3 для своего кода. и я хочу отсортировать данные в следующем формате.Сортировка данных в алфавитно-цифровом порядке с использованием postgresql
под строительство 01 - 101
Building 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);
}
}
Я хочу отсортировать его в подходящем порядке, если у собственности нет здания, тогда сортируйте его по номерам единиц. Любая помощь приветствуется по этой проблеме. Благодарю.
Я смущен - имя здания 'Building 01 - 101' является строкой, если вы сортируете по первому числу, а затем второе, и они дополнены, не будет ли лексикографический вид? –
Эти * делают * сортируют в естественном заказе. Пожалуйста, покажите * реальные * базовые данные, из которых вы работаете. Попробуйте http://sqlfiddle.com/. Вы также забыли включить свою версию PostgreSQL. –
Возможно, этот вопрос тоже полезен: http://stackoverflow.com/questions/12965463/humanized-or-natural-number-sorting-of-mixed-word-and-number-strings –