Показать сообщение отдельно
Старый 15.11.2009, 19:26     # 3
mahoune
Newbie
 
Аватар для mahoune
 
Регистрация: 04.03.2004
Сообщения: 42

mahoune Путь к славе только начался
Exclamation

Борланд совершенно прав, синтаксис такой же.

Если вариантов ответов у вас больше то имеет смысл завести отдельную табличку. Вот пример:

PHP код:
//--Основная таблица
mysqlCREATE TABLE `tst`.`my_tbl1` (
    ->   `
idINTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    ->   `
my_valVARCHAR(45NOT NULL,
    ->   
PRIMARY KEY (`id`)
    -> )
    -> 
ENGINE MyISAM;
Query OK0 rows affected (0.11 sec)

//--Закидываем данные
mysqlinsert into my_tbl1 (`my_val`) values ('1');
Query OK1 row affected (0.17 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('1');
Query OK1 row affected (0.00 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('1');
Query OK1 row affected (0.00 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('0');
Query OK1 row affected (0.00 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('0');
Query OK1 row affected (0.00 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('1');
Query OK1 row affected (0.02 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('1');
Query OK1 row affected (0.00 sec)

//-- Такие вот у нас в ней данные
mysqlselect from my_tbl1;
+----+--------+
id my_val |
+----+--------+
|  
1      |
|  
1      |
|  
1      |
|  
0      |
|  
0      |
|  
1      |
|  
1      |
+----+--------+
7 rows in set (0.00 sec)

//-- Так работает CASE
mysqlselect case my_val when '1' then 'Yes' when '0' then 'No' else 'Hz' end as my_field from my_tbl1;
+----------+
my_field |
+----------+
Yes      |
Yes      |
Yes      |
No       |
No       |
Yes      |
Yes      |
+----------+
7 rows in set (0.00 sec)

//-- А вот дополнителная таблица
mysqlCREATE TABLE `tst`.`ny_tbl2` (
    ->   `
fld_valINTEGER NOT NULL,
    ->   `
val_nameVARCHAR(45NOT NULL,
    ->   
PRIMARY KEY (`fld_val`)
    -> )
    -> 
ENGINE MyISAM;
Query OK0 rows affected (0.16 sec)

//-- Заполняем её данные
mysqlinsert into ny_tbl2 values ('1''Yes'),('0','No');
Query OK2 rows affected (0.11 sec)
Records2  Duplicates0  Warnings0

//-- Вот они
mysqlselect from ny_tbl2;
+---------+----------+
fld_val val_name |
+---------+----------+
|       
Yes      |
|       
No       |
+---------+----------+
2 rows in set (0.00 sec)

//-- А вот таким нехитрым запросом можно эти таблицы объеденить
mysqlselect t1.idt2.val_name
    
-> from my_tbl1 t1
    
-> left join ny_tbl2 t2 on t2.fld_val t1.my_val
    
-> ;
+----+----------+
id val_name |
+----+----------+
|  
Yes      |
|  
Yes      |
|  
Yes      |
|  
No       |
|  
No       |
|  
Yes      |
|  
Yes      |
+----+----------+
7 rows in set (0.11 sec)

mysqlinsert into my_tbl1 (`my_val`) values ('3');
Query OK1 row affected (0.01 sec)

//-- немного усовершенствуем
mysqlselect t1.idIFNULL(t2.val_name,'Hz') as val_name_x
    
-> from my_tbl1 t1
    
-> left join ny_tbl2 t2 on t2.fld_val t1.my_val
    
-> ;
+----+------------+
id val_name_x |
+----+------------+
|  
Yes        |
|  
Yes        |
|  
Yes        |
|  
No         |
|  
No         |
|  
Yes        |
|  
Yes        |
|  
Hz         |
+----+------------+
8 rows in set (0.13 sec
__________________
mahoune
mahoune вне форума