Drupal 7 alter views sql query

Use

Hook_views_query_alter(&$view, &$query)

Example code:

/**
 * Implements hook_views_query_alter().
 */
function custom_general_views_query_alter(&$view, &$query) {
  if ($view->name == 'data_server_query') {
    // alter the condition for alexa filter
    if (isset($query->where[1]['conditions']) && isset($query->table_queue['field_data_field_csv_alexa_rank'])) {
      foreach ($query->where[1]['conditions'] as $key => $data) {
        if (is_string($data['field'])) {
          if ($data['field'] == 'field_data_field_csv_alexa_rank.field_csv_alexa_rank_value') {
            // views value format for alexa rank: xxxx - xxxx
            $val = explode('-', $data['value']);
            // remove the original query
            unset($query->where[1]['conditions'][$key]);
            $query->where[1]['conditions'][] = array(
              'field' => 'field_data_field_csv_alexa_rank.field_csv_alexa_rank_value',
              'value' => (int)$val[0],
              'operator' => '>=',
            );
            $query->where[1]['conditions'][] = array(
              'field' => 'field_data_field_csv_alexa_rank.field_csv_alexa_rank_value',
              'value' => (int)$val[1],
              'operator' => '<=',
            );
          }  
        }
      }
    } 
  }
}
Category: