Last active
December 12, 2015 05:18
-
-
Save FinchPowers/4720199 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| function find($type = 'first', $query = array()) { | |
| if(isset($query['conditions']) && (array_key_exists('MiscIdentifier.identifier_value >=', $query['conditions']) || array_key_exists('MiscIdentifier.identifier_value <=', $query['conditions']))) { | |
| $gt_key = array_key_exists('MiscIdentifier.identifier_value >=', $query['conditions']); | |
| $lt_key = array_key_exists('MiscIdentifier.identifier_value <=', $query['conditions']) | |
| // do we really need to work with decimals? | |
| $inf_value = str_replace(',', '.', ($gt_key ? $query['conditions']['MiscIdentifier.identifier_value >='] : '')); | |
| $sup_value = str_replace(',', '.', ($lt_key ? $query['conditions']['MiscIdentifier.identifier_value <='] : '')); | |
| if(strlen($inf_value.$sup_value) && (is_numeric($inf_value) || !strlen($inf_value)) && (is_numeric($sup_value) || !strlen($sup_value))) { | |
| if($gt_key)) { | |
| $query['conditions']['MiscIdentifier.identifier_value * 1 >='] = $query['conditions']['MiscIdentifier.identifier_value >=']; | |
| unset($query['conditions']['MiscIdentifier.identifier_value >=']); | |
| } | |
| if($lt_key) { | |
| $query['conditions']['MiscIdentifier.identifier_value * 1 <='] = $query['conditions']['MiscIdentifier.identifier_value <=']; | |
| unset($query['conditions']['MiscIdentifier.identifier_value <=']); | |
| } | |
| //Manage Order | |
| if(!isset($query['order'])){ | |
| //supperfluou?s | |
| $query['order'][] = 'MiscIdentifier.identifier_value * 1'; | |
| }else if(isset($query['order']['MiscIdentifier.identifier_value'])) { | |
| $query['order']['MiscIdentifier.identifier_value * 1'] = $query['order']['MiscIdentifier.identifier_value']; | |
| unset($query['order']['MiscIdentifier.identifier_value']); | |
| } | |
| } | |
| } | |
| return parent::find($type, $query); | |
| } |
Author
FinchPowers
commented
Feb 6, 2013
- Pourquoi est -ce que ton expression régulière tient compte des virgules? Est-ce possible d'avoir des points flottants? Si oui, ton cast n'est pas bon car il élimine la partie flottante. Ce devrait plutôt être CAST(... AS DECIMAL(10,5)).
- La regexp n'est pas bonne, elle va omettre les identifiants paddés tels que 01, 001, etc. et les 0.01. Tu pourais utiliser "^[0-9]+([,.][0-9]+)?$"
- Les recherches effectuées ainsi ne bénéficieront pas de l'index.
- Je n'ai pas testé la performance de REGEXP vs CAST(val AS DECIMAL) != 0 (qui parcontre ne garderait pas les virgules.
- Au lieu du cast et de l'expression régulière, peut-être peux-tu simplement faire MiscIdentifier.identifier_value * 1 != 0. Par contre, encore une fois, si un nombre contient une virgule il serait perdu.
- Le order ne sera pas super. Si tu as TOV-001, TOV-002, ABC-001, ABC-002, ton order by sera
- ABC-001
- TOV-001
- ABC-002
- TOV-002
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment