Skip to content

Instantly share code, notes, and snippets.

@FinchPowers
Last active December 12, 2015 05:18
Show Gist options
  • Select an option

  • Save FinchPowers/4720199 to your computer and use it in GitHub Desktop.

Select an option

Save FinchPowers/4720199 to your computer and use it in GitHub Desktop.
<?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);
}
@FinchPowers
Copy link
Copy Markdown
Author

  • 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