Skip to content

Commit

Permalink
Merge pull request #601 from thingNumber1/patch-1
Browse files Browse the repository at this point in the history
Adding ORDER BY REGEXP possibilites
  • Loading branch information
avbdr authored Jun 2, 2017
2 parents 72d231d + dd37055 commit 158eec4
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions MysqliDb.php
Original file line number Diff line number Diff line change
Expand Up @@ -1080,16 +1080,16 @@ public function loadXml($importTable, $importFile, $importSettings = null)
/**
* This method allows you to specify multiple (method chaining optional) ORDER BY statements for SQL queries.
*
* @uses $MySqliDb->orderBy('id', 'desc')->orderBy('name', 'desc');
* @uses $MySqliDb->orderBy('id', 'desc')->orderBy('name', 'desc', '^[a-z]')->orderBy('name', 'desc');
*
* @param string $orderByField The name of the database field.
* @param string $orderByDirection Order direction.
* @param array $customFields Fieldset for ORDER BY FIELD() ordering
* @param mixed $customFieldsOrRegExp Array with fieldset for ORDER BY FIELD() ordering or string with regular expresion for ORDER BY REGEXP ordering
*
* @throws Exception
* @return MysqliDb
*/
public function orderBy($orderByField, $orderbyDirection = "DESC", $customFields = null)
public function orderBy($orderByField, $orderbyDirection = "DESC", $customFieldsOrRegExp = null)
{
$allowedDirection = Array("ASC", "DESC");
$orderbyDirection = strtoupper(trim($orderbyDirection));
Expand All @@ -1105,13 +1105,16 @@ public function orderBy($orderByField, $orderbyDirection = "DESC", $customFields
throw new Exception('Wrong order direction: ' . $orderbyDirection);
}

if (is_array($customFields)) {
foreach ($customFields as $key => $value) {
$customFields[$key] = preg_replace("/[^-a-z0-9\.\(\),_` ]+/i", '', $value);
if (is_array($customFieldsOrRegExp)) {
foreach ($customFieldsOrRegExp as $key => $value) {
$customFieldsOrRegExp[$key] = preg_replace("/[^-a-z0-9\.\(\),_` ]+/i", '', $value);
}

$orderByField = 'FIELD (' . $orderByField . ', "' . implode('","', $customFields) . '")';
}
$orderByField = 'FIELD (' . $orderByField . ', "' . implode('","', $customFieldsOrRegExp) . '")';
}elseif(is_string($customFieldsOrRegExp)){
$orderByField = $orderByField . " REGEXP '" . $customFieldsOrRegExp . "'";
}elseif($customFieldsOrRegExp !== null){
throw new Exception('Wrong custom field or Regular Expression: ' . $customFieldsOrRegExp);
}

$this->_orderBy[$orderByField] = $orderbyDirection;
return $this;
Expand Down

0 comments on commit 158eec4

Please sign in to comment.