2010-08-13 22 views
2

J'ai une table complète de "titre" que je veux commander par titre. Le problème est que beaucoup d'entre eux ont un espace vide avant le titre. Je pense writting un script php pour résoudre tous les (super facile) mais j'étais curieux de voir comment pourrais-je faire:MySQL supprimer l'espace avant l'ordre par la clause

SELECT * FROM products ORDER BY title 

Mais en même temps, coupe le titre il ne marche pas pour l'espace vide. Tout dans la même requête sans changer les données. Dieu j'espère que j'ai du sens.

Je suis donc vraiment à la recherche d'une solution mysql. Pour ce que ça vaut, j'utilise Zend_Db donc une solution utilisant ça serait encore mieux mais je peux gérer directement MySQL.

Répondre

9

Vous pouvez utiliser la fonction TRIM:

SELECT TRIM(title) as title, field2, field3 FROM products ORDER BY TRIM(title) 

Cela devrait pour le faire!

+1

Salut merci. Vous a donné un point et la bonne réponse. – Iznogood

+0

Merci! Je vous en suis reconnaissant. – codykrieger

2

pure requête SQL ressemblerait à ceci:

produits UPDATE SET title = TRIM (titre)

+0

Merci, mais comme je le disais idéalement, je ne change pas les données rognées juste pour l'ordre par article. – Iznogood

+0

Si c'est votre cas d'utilisation c'est bien. Cependant, ce n'est certainement pas idéal, car vous devez effectuer une opération supplémentaire sur la table pour * chaque requête * afin d'obtenir des résultats dans le bon ordre. Si votre table devient volumineuse, vous constaterez une baisse notable des performances. –

3

Je vais me répondre, car la solution exacte à ma question est:

SELECT * FROM products ORDER BY TRIM(title) 

J'accepte toujours la réponse de codykrieger parce qu'il fait je donc trouvé ma solution.

Voici la réponse Zend_Db:

$products->fetchAll($products->select()->order('TRIM(title) ASC'));