我在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;找到一个有效的解决方案。
第二:在服务器上,它确实给了我最大日期,但不是它的正确数字,而是第一个可用数字。我该如何解决这个问题?
答案 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();