SQL查询结果为字符串

时间:2014-05-28 08:40:29

标签: php sql yii

我在SQL中使用Yii framework。 我需要展示这个人最近活跃的一周(它的号码和日期)。所以我写了以下代码:

public function latestWeek() 
{           
    $datalogin=//the login is working fine
    $sql ="SELECT w.number,MAX(w.start_date)
    FROM tbl_person_week t, tbl_week w
    WHERE t.person_id=$this->id AND t.week_id=w.id"; 

    $query = mysqli_query($datalogin, $sql);
    return $query;
}

现在,我在服务器上检查了这个查询并且它工作得很好(差不多)但是第一件事:我需要将它转换为字符串,因为yii的CgridView无法读取它,我无法&# 39;找到一个有效的解决方案。

第二:在服务器上,它确实给了我最大日期,但不是它的正确数字,而是第一个可用数字。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

这样的查询永远不应该在客观框架中使用。如果你想要执行自己的查询,你应该这样做:

$sql = "your sql code";
$array = Yii::app()->db->createCommand($sql)->queryAll();

结果,您将获得具有所选列和行的多维数组

如果你想在网格视图中使用它,你应该这样做:

$count = Yii::app()->db->createCommand($sql)->queryScalar();

$dataProvider = new CSqlDataProvider($sql, array('totalItemCount'=>$count));

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'grid-id',
     'dataProvider'=> $dataProvider,
));

您还可以使用除Yii :: app() - > db之外的连接。查看文档中的CDbConnection课程。

编辑:如果您想使用mysql_fetch_assoc之类的查询,请同时查看queryRow()方法,而不是queryAll()

答案 1 :(得分:0)

使用Mysql_fetch_array

public function latestWeek() 
    {           
        $datalogin=//the login is working fine
        $sql ="SELECT w.number,MAX(w.start_date)
        FROM tbl_person_week t, tbl_week w
        WHERE t.person_id=$this->id AND t.week_id=w.id"; 

        $query = mysqli_query($datalogin, $sql);
        while($row = mysqli_fetch_array($query)){
        echo $row;
        }

    }

答案 2 :(得分:0)

假设从你的qu。如果你想将周数和开始日期作为一个字符串,你必须连接sql中的两列。

您还需要指定周数来自具有最大开始日期的行,这并不像您最初想象的那么简单。

我不喜欢将person_id直接注入SQL,在这种情况下并不是很糟糕,但是进入安全方面是一个坏习惯。框架中有绑定方法,我同意Arek,你应该尽可能地依赖yii框架。

要获取标量字符串值,如果您坚持使用自己的SQL ..我建议如下:

$sql='
  SELECT CONCAT('Week ',tw.number,' starting ',tw.start_date)
    FROM tbl_week tw
    JOIN (
      SELECT MAX(twi.start_date) max_start_date
        FROM tbl_week twi
        JOIN tbl_person_week tpwi
          ON tpwi.week_id = twi.id
         AND tpwi.person_id = :person_id
         ) i
      ON tw.start_date = i.max_start_date;
';
$command=Yii::app()->db->createCommand($sql);
$command->bindParam(":person_id", $this->id);
return $command->queryScalar();