You are here

function _views_filter_selective_query in Views Hacks 6

Helper function to create selective query.

2 calls to _views_filter_selective_query()
views_filters_selective_handler_filter in views_filters_selective/views_filters_selective.module
Callback implementation for generic filter.
views_filters_selective_handler_filter_term_node_tid_depth in views_filters_selective/views_filters_selective.module
Callback implementation for term_node_tid_depth filter.

File

views_filters_selective/views_filters_selective.module, line 256

Code

function _views_filter_selective_query($filter, $field_name, $table_name, $oids) {

  // Create new Views query object to make the SQL statement for us.
  $views_data = views_fetch_data($filter->view->base_table);
  $query_options = $filter->view->display_handler
    ->get_option('query');
  $plugin = !empty($views_data['table']['base']['query class']) ? $views_data['table']['base']['query class'] : 'views_query';
  $query = views_get_plugin('query', $plugin);
  $query
    ->init($filter->view->base_table, $filter->view->base_field, $query_options['options']);
  $query
    ->add_field($table_name, $field_name, $field_name);
  $placeholders = db_placeholders($oids, 'int');
  $query
    ->add_where(0, "{$filter->view->base_table}.{$filter->view->base_field} IN ({$placeholders})", $oids);
  $query->view = (object) array(
    'name' => 'selective_query',
    'selective_query' => TRUE,
  );

  // needed to avoid PHP notice and for views_query_alter
  $query
    ->alter($query->view);

  // Return the results.
  $options = array();
  $result = db_query($query
    ->query(), $oids);
  while ($id = db_fetch_object($result)) {
    $options[] = $id->{$field_name};
  }
  return $options;
}