1

コードにphp 5.3を使用しています。次の形式でデータを並べ替えたいと思います。

ビル 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 );  
    }  
}  

プロパティに建物がない場合は、ユニット番号でのみ並べ替えます。この問題に関するヘルプは大歓迎です。ありがとう。

4

1 に答える 1

0

この場合、文字列を見て、それらを処理する方法を確認する必要があります。「Building X - Y」という形式の文字列があり、X の次に Y で並べ替えたいとします。簡単なことは、これを数値配列に変換することです。これは次の方法で実行できます。

 .....
 ORDER BY string_to_array(regexp_replace(building_name, 'Building ', ''), ' - ')::int[]

これにより、「Building X - Y」が {X,Y} に変わり、Building 1 - 100 が {1,100} などになります。これらは、一番左の要素から順に並べられます。

于 2013-06-07T07:36:10.180 に答える