Sqlite Yii2:如何在同一条记录的两列中获取具有相同非空数据的表列
我想使用ActiveQuery从SQLite数据库中选择字段,其中两列具有相等的非空值 我需要这样的结果SQL,例如:Sqlite Yii2:如何在同一条记录的两列中获取具有相同非空数据的表列,sqlite,activerecord,yii2,Sqlite,Activerecord,Yii2,我想使用ActiveQuery从SQLite数据库中选择字段,其中两列具有相等的非空值 我需要这样的结果SQL,例如: SELECT * FROM messages WHERE msg_sent = 0 AND file_size = downloaded_size AND file_sha1 = downloaded_sha1 假设您将activeRecord类命名为MyModel $models = MyModel::find() ->where(['msg_
SELECT * FROM messages WHERE msg_sent = 0 AND file_size = downloaded_size AND file_sha1 = downloaded_sha1
假设您将activeRecord类命名为MyModel
$models = MyModel::find()
->where(['msg_sent'=> 0,
'file_size'=>'downloaded_size',
'file_sha1' =>'downloaded_sha1'])
->all();
如果不使用哈希格式,可以使用文本格式作为
$models = MyModel::find()
->where('msg_sent = 0 and file_size= downloaded_size and file_sha1 = downloaded_sha1')
->all();
假设您将activeRecord类命名为MyModel
$models = MyModel::find()
->where(['msg_sent'=> 0,
'file_size'=>'downloaded_size',
'file_sha1' =>'downloaded_sha1'])
->all();
如果不使用哈希格式,可以使用文本格式作为
$models = MyModel::find()
->where('msg_sent = 0 and file_size= downloaded_size and file_sha1 = downloaded_sha1')
->all();
我要求这样的解决方案:
use yii\db\Expression;
$messages = Messages::find()
->where([
'file_downloaded' => 1,
])
->andWhere(['=', 'msg_sent', 0])
->andWhere(['=', 'file_size', new Expression('`downloaded_size`')])
->andWhere(['=', 'file_sha1', new Expression('`downloaded_sha1`')])
->asArray()
->all();
// to debug raw SQL I have used the following:
$query = = Messages::find()
->where([
'file_downloaded' => 1,
])
->andWhere(['=', 'msg_sent', 0])
->andWhere(['=', 'file_size', new Expression('`downloaded_size`')])
->andWhere(['=', 'file_sha1', new Expression('`downloaded_sha1`')]);
echo var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql) . PHP_EOL;
我要求这样的解决方案:
use yii\db\Expression;
$messages = Messages::find()
->where([
'file_downloaded' => 1,
])
->andWhere(['=', 'msg_sent', 0])
->andWhere(['=', 'file_size', new Expression('`downloaded_size`')])
->andWhere(['=', 'file_sha1', new Expression('`downloaded_sha1`')])
->asArray()
->all();
// to debug raw SQL I have used the following:
$query = = Messages::find()
->where([
'file_downloaded' => 1,
])
->andWhere(['=', 'msg_sent', 0])
->andWhere(['=', 'file_size', new Expression('`downloaded_size`')])
->andWhere(['=', 'file_sha1', new Expression('`downloaded_sha1`')]);
echo var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql) . PHP_EOL;
谢谢你,@scaisEdge,这是我尝试过的第一件事,但它不起作用。我有以下SQL语句,然后我使用你的建议:string(149)“从<代码>消息<代码>中选择*,其中(
文件下载
=1)和(文件大小
='下载大小')和(文件大小
='下载1'))和(消息发送
=0)我需要db字段,而不是列名称已更新的字符串。。使用另一种where格式。。希望是有用的谢谢你,@scaisEdge,这是我尝试过的第一件事,但它不起作用。我有以下SQL语句,然后我使用你的建议:string(149)“从消息中选择*”,其中(文件下载=1)和(文件大小=download\u大小)和(文件下载=download\u大小”)(msg_sent
=0)“我需要db字段,而不是列名称为Answer updated..的字符串,使用另一种where格式..希望有用