Yii标准选择所有行

时间:2014-07-02 03:24:29

标签: php yii conditional-statements

我正在使用Yii框架为符合条件的所有行执行条件选择。 我试图获取一个表的ID并搜索包含ID前缀的另一个表代码。 (exp ID-code或1-sdfa)。目前,下面的代码返回所有行。以下是详细信息,任何见解都会有所帮助。谢谢。

[table 1]
tbl_School
---------------------------
| ID |       Name         |
---------------------------
| 1  |   forist hills     |
| 2  |       Dhs          |
---------------------------
[table 2]
tbl_ticket
------------------
| ID |   code    |
------------------
| 1  |  1-fd23s  |
| 2  |  2-fdet2  |
| 3  |  1-4wscd  |
| 4  |  2-oifjd  |
| 5  |  1-zzds6  |
------------------

在ID = 1上运行函数后,我希望看到

------------------
| ID |   code    |
------------------
| 1  |  1-fd23s  |
| 3  |  1-4wscd  |
| 5  |  1-zzds6  | 
------------------

这是我的代码:

public static function get_tickets($ticket_ID){
$match = '';
$match = addcslashes($match, "$ticket_ID".'_%');
$q = new CDbCriteria( array(
'condition' => "code LIKE :match",
'params'    => array(':match' => "$match%")
) );

$rows = Ticket::model()->findAll( $q );    
return $rows;

}

1 个答案:

答案 0 :(得分:1)

PDO确实为您逃脱,因此您不需要自己addcslashes(我甚至不知道存在的,总是使用addslashes :))

其次,您最终选择了[NUMBER]_%%,这些是3个通配符。 由于Ryan已在评论中进行了更改,您可能需要选择 - %而不是:

public static function get_tickets($ticket_ID){
   $ticket_ID = intval($ticket_ID);
   if (!$ticket_ID)
      return null;

   $q = new CDbCriteria( array(
      'condition' => "code LIKE :match",
      'params'    => array(':match' => $ticket_ID . "-%")
   ) );

   $rows = Ticket::model()->findAll( $q );    
   return $rows;
}

正如您所看到的,我确实对票号进行了数字健全性检查,就像保持谨慎一样。

最后:我希望您不要介意这个建议,但是不能将票号作为单独的列添加吗?如果此表中有很多行,您将最终遇到完全可避免的性能问题。使用单独的列作为索引,您可以使用更少的cpu来获得相同的结果。