Show views display based on exposed filter value
I find out two methods here.

Method 1: Use set_display function

function mymodule_views_pre_view(&amp;$view, &amp;$display_id, &amp;$args)
{
 //To get the query string to find out the field value
$query = drupal_get_query_parameters($_GET, array('q', 'page'));

if( $query['viewby'] == 'photo')
 {
  $view-&gt;set_display('view_photo');
 }
}


Method 2: drupal_goto (if the two displays are not sharing the same exposed filter)

function mymodule_views_pre_view(&amp;$view, &amp;$display_id, &amp;$args)
{
 //To get the query string to find out the field value
$query = drupal_get_query_parameters($_GET, array('q', 'page'));

if( $query['viewby'] == 'photo')
 {
  //build up the the query string here
 $query['filter_a'] == 'xxx';
 drupal_goto('viewphoto_path',array('query' =&gt; $query));
 }
}


To my case, i used Method 2.

I am really new to drupal, and not sure are these methods will cause any problem or not.
Let me know if they are ok.