首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yi1.x,查询DB选择中的查询

Yi1.x,查询DB选择中的查询
EN

Stack Overflow用户
提问于 2014-05-11 12:11:16
回答 2查看 1K关注 0票数 0

我有这样的sql查询

代码语言:javascript
复制
SELECT * FROM tbl_role WHERE 
tbl_role.id NOT IN (
     SELECT tbl_user_role.roleID FROM tbl_user_role 
     WHERE tbl_user_role.userID = 35
)
AND
tbl_role.id NOT IN (
     SELECT tbl_user_role_request.roleID FROM tbl_user_role_request 
     WHERE tbl_user_role_request.userID = 35 AND tbl_user_role_request.dateEnd IS NULL)

用Yii类代码制作它的最佳解决方案是什么。如何使用YII1.x进行此查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-12 14:02:59

假设:

  • tbl_role有一个名为角色的模型
  • tbl_user_role有一个名为UserRole的模型
  • tbl_user_role_request有一个名为UserRoleRequest的模型

请注意,这将执行3次单独的查询,但我相信这是在不造成完全混乱的情况下可以得到的最接近的查询。

代码语言:javascript
复制
<?php

$userId = 35;

$roles = UserRole::findAllByCondition(array('userId' => $userId));
$roleIds = array_values(CHtml::listData($roles, 'roleId', 'roleId');

$roleRequests = UserRoleRequest::findAllByCondition(array('userId'=>$userId, 'dateEnd'=>null));
$roleRequestIds = array_values(CHtml::listData($roleRequest, 'roleId', 'roleId'));

$criteria = new CDbCriteria();
$criteria->addNotInCondition('id', $roleIds);
$criteria->addNotInCondition('id', $roleRequestIds);

$roles = Role::findAll($criteria);
票数 0
EN

Stack Overflow用户

发布于 2014-05-12 07:07:27

我会使用CDbCommandhttp://www.yiiframework.com/doc/api/1.1/CDbCommand#queryAll-detail

使用以下代码获取数据

代码语言:javascript
复制
$data = Yii::app()->db->createCommand('sql query')->queryAll;

然后可以使用此数据集创建dropDownList。

代码语言:javascript
复制
$list = CHtml::listData($data, 'value field', 'text field');
echo $form->dropDownList($model, 'attribute', $list);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23592443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档