【发布时间】:2014-01-08 00:18:28
【问题描述】:
我的sql表是这样的:
+----+------------+--------+---------------+---------------+-------------+----------+-------------+---------------------+
| id | msisdn | status | reason | CallRejection | Unavailable | NoAnswer | NetworkBusy | autotimestamp |
+----+------------+--------+---------------+---------------+-------------+----------+-------------+---------------------+
| 1 | 9999999901 | Failed | NoAnswer | 1 | 2 | 2 | 4 | 2013-12-19 15:46:50 |
| 2 | 9999999902 | Failed | NetworkBusy | 4 | 2 | 3 | 2 | 2013-12-19 13:07:42 |
| 3 | 9999999903 | Failed | CallRejection | 6 | 6 | 6 | 5 | 2013-12-19 13:07:53 |
| 4 | 9999999904 | Failed | Unavailable | 2 | 4 | 2 | 0 | 2013-12-19 13:08:03 |
| 5 | 9999999905 | Failed | Misc | 6 | 2 | 6 | 2 | 2013-12-19 13:07:01 |
| 6 | 9999999906 | Failed | NoAnswer | 1 | 3 | 1 | 6 | 2013-12-19 13:07:24 |
| 7 | 9999999907 | Failed | NetworkBusy | 6 | 6 | 2 | 3 | 2013-12-19 13:07:42 |
| 8 | 9999999908 | Failed | CallRejection | 8 | 3 | 3 | 0 | 2013-12-19 13:07:53 |
| 9 | 9999999909 | Failed | Unavailable | 3 | 8 | 5 | 6 | 2013-12-19 13:08:03 |
| 10 | 9999999910 | Failed | Misc | 8 | 4 | 0 | 4 | 2013-12-19 13:07:01 |
+----+------------+--------+---------------+---------------+-------------+----------+-------------+---------------------+
我想根据每一行的reason 列的值提取每个原因的值。例如:
row 1 应该给出2 作为结果,因为reason 列具有noanswer,因此应该返回该特定列的值,即noanswer。
实际上,在将返回值与常量进行比较后,我必须选择多行。我可以通过以下方法做到这一点:
select @col := reason from msisdn_table where id=1;
SET @a = concat('select ', @col, ' from msisdn_table where id=1');
PREPARE STMT FROM @a;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
但这不是很有前途的解决方案,因为它只适用于一行,我必须使用 for 循环才能获得 1000 行的块,这不会很有效。更有效的方法是什么?
【问题讨论】:
标签: mysql database performance