Autor Zpráva
kubik
Profil
Mám v MySQL seznam latinských názvů rostlin, které obsahují apostrofy. Záznamy s apostrofy se však předřazují těm ostatním. Nevíte prosím někdo, jak ta data seřadit, aby se jakoby ty apostrofy (případně jiné znaky) ignorovaly?

Ukázka seznamu po obyčejném seřazení:
Saxifraga 'Cecil Davis'
Saxifraga 'Cockscomb'
Saxifraga 'Portae'
Saxifraga callosa (S. lingulata)
Saxifraga callosa var. lantoscana
Saxifraga cartilaginea hybr.
Saxifraga cochlearis 'Major'
Marek88
Profil
EDIT: Teď mi došlo, že kubik psal, že data má v mysql a proto je lepší je řadit už při jejich získávání z db. Moje řešení to řadí až na úrovni php.

Napadlo mě přiřadit vytvořit pole, kde bude jako klíč sloužit název rostliny upravený (odstranění nežádoucích znaků) pomocí preg_replace na potom použít funkci na řazení pole podle klíče.

Ale jsou i jiné (možná lepší) funkce, kde si můžete vytvořit vlastní pravidla pro řazení. Třeba uasort. Konkrétně tenhle příklad je podobný vašemu problému:
<?php
$fruits = array('Orange9','Orange11','Orange10','Orange6','Orange15');
uasort ( $fruits , function ($a, $b) {
            return strnatcmp($a,$b); // or other function/code
        }
    );
print_r($fruits);
?>
returns
Array
(
    [3] => Orange6
    [0] => Orange9
    [2] => Orange10
    [1] => Orange11
    [4] => Orange15
)
kubik
Profil
Díky Marek88 za odpověď, ale na úrovni php to není ono. Navíc nevím, jak by to dopadlo s tím polem, vzhledem k tomu, že se jedná řádově o několik tisíc položek.

Nicméně jsem nakonec, zdá se, našel řešení s využitím MySQL funkce REPLACE(), viz http://dev.mysql.com/doc/refman/5.5/en/string-functions.html:

SELECT * FROM rostliny ORDER BY REPLACE(REPLACE(nazevlat1,'\'',''),' x ',' ')


Pro upřesnění - potlačuji nejen apostrofy (vnořený REPLACE), ale i sekvence " x ", které se používají u kříženců (nebo co to je). Ukázka několika řádků před:

Saxifraga 'Cecil Davis'
Saxifraga 'Cockscomb'
Saxifraga bronchialis
Saxifraga caespitosa 'Findling'
Saxifraga cherlerioides var. rebushirensis
Saxifraga juniperifolia 'Brotheri'
Saxifraga x arendsii 'White Pixie'
Saxifraga x irvingii 'Jenkinsiae'


a po:

Saxifraga x arendsii 'White Pixie'
Saxifraga bronchialis
Saxifraga caespitosa 'Findling'
Saxifraga 'Cecil Davis'
Saxifraga cherlerioides var. rebushirensis
Saxifraga 'Cockscomb'
Saxifraga x irvingii 'Jenkinsiae'
Saxifraga juniperifolia 'Brotheri'

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: