2013-09-17 3 views
3

Пожалуйста, помогите решить следующую проблему. У меня таблица называется time_schedule.
Мои требования: если start_city_name = 'somecity', тогда мне нужно выбрать departure_time
else Мне нужно выбрать arrival_time. Здесь я хочу, какой из них выбран. Например:если условие в mysql select statement

SELECT IF(start_city_name='somecity',departure_time,arrival_time) 
    FROM time_schedule; 

здесь если состояние соответствует departure_ время выбрано. Тогда мне нужно выбрать его как departure_time.
else Если условие не выполнено, выбирается время прибытия, тогда мне нужно выбрать результат как arrival_time. Я использую MySQL. Заранее спасибо.

+0

сделал ваш запрос возвращает ошибку? –

+0

нет. И дать результат. Но я не знаю, какой из них выбран. – Srinivas

ответ

9

Чтобы узнать, какой из них выбран, вы можете сделать что-то вроде этого:

SELECT IF(start_city_name='somecity', 'Departure time', 'Arrival time'), 
     IF(start_city_name='somecity', departure_time, arrival_time) 
FROM time_schedule; 

Вы не можете иметь его в качестве имени столбца, что, если есть одна строка, где условие истинно, и один, где условие ложно, каково должно быть имя столбца?

Однако, если вы счастливы разделив их на 2 колонки:

SELECT IF(start_city_name='somecity', NULL, arrival_time) AS 'Arrival time', 
     IF(start_city_name='somecity', departure_time, NULL) AS 'Departure time' 
FROM time_schedule; 

Это очень похоже на просто говоря:

SELECT arrival_time, departure_time 
FROM time_schedule; 

Кроме того arrival_time будет NULL, когда условие истинно , и departure_time будет NULL, когда условие ложно.

+0

Спасибо @ Dukeling. Это близко к моему требованию. Но я хочу, чтобы имя столбца было выбрано на основе условия. предположим, что выбрано departure_time, тогда в столбце результата должно быть что-то вроде отправления. – Srinivas

+0

, потому что я выбираю больше столбцов вместе с departure_time или arrival_time. – Srinivas

+0

@ user2602802 См. Редактирование. – Dukeling

1

Используйте CASE конструкцию, как это:

SELECT CASE start_city 
     WHEN 'somecity' THEN departure_time 
     ELSE arrival_time 
     END AS column_alias 
    FROM time_schedule; 

Google для CASE заявления для получения более подробной информации. На это много ресурсов.

+0

спасибо @rachcha. Мое требование следующее. column_name: departure/arrival column_value: departure_time/arrival_time на основе столбца start_city_name. – Srinivas

+0

Вы имеете в виду '' departure_time'' и '' arrival_time'' являются строковыми литералами, а не именами столбцов? – Rachcha

+0

Это фактические имена столбцов в таблице времени. на основе start_city_name мне нужно выбрать departure_time или arrival_time. а также я хочу знать, какой из них выбран как имя псевдонима в результате. – Srinivas

0

Использование ниже кода для реализации дела в MySQL Query

код для контроллера

 $alias="count(userId) as totaluser,sum(case when role='user' then 1 else 0 end) patient,sum(case when role='doctor' then 1 else 0 end) doctor,date_format(registerDate , ('%Y-%m')) as registerDate"; 
     $tabel='user'; 
     $where="role != 'admin' AND registerDate >= '".date('Y-m-d',strtotime($from))."' AND registerDate < '".date('Y-m-d',strtotime($to))."'+ INTERVAL 1 DAY"; 
     $groupby="date_format(registerDate , ('%Y-%m'))"; 
     $userData=$this->commonmodel->getchartdata($alias,$tabel,$where,'','','',$groupby); 

код для модели

public function getchartdata($alias='*',$table,$where='',$join='',$orderBy='',$whereOr='',$groupby='',$limit='',$whereIn='') 
{ 

    $this->db->select($alias); 
    $this->db->from($table); 
    if($join!='') 
    { 
     for($i=0;$i<count($join);$i++) 
     { 
      $this->db->join($join[$i]['tableName'],$join[$i]['joinCondition'],$join[$i]['joinType']); 
     } 
    } 
    if($whereIn != '') 
    { 
     foreach($whereIn as $coulmn=>$value){ 
      $this->db->where_in($coulmn,$value); 
     } 
    } 

    if($whereOr!='') 
    { 

     foreach($whereOr as $coulmn=>$value){ 
      $this->db->or_where($coulmn,$value); 
     } 
    }  
    if($where!='') 
    { 
     $this->db->where($where); 
    }  
    if($orderBy!='') 
    { 
     $orderByKey=array_keys($orderBy); 
     $orderByMode=array_values($orderBy); 
     $this->db->order_by($orderByKey[0],$orderByMode[0]); 
    } 
    if($groupby != '') 
    { 
     $this->db->group_by($groupby); 
    } 
if($limit!='') 
    { 
     //print_r($limit);die; 
     //s $this->db->limit($limit,20); 
    } 
    $query=$this->db->get(); 
    $result=$query->result(); 

    return $result; 
} 

to know more click here