Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite Yii2:如何在同一条记录的两列中获取具有相同非空数据的表列_Sqlite_Activerecord_Yii2 - Fatal编程技术网

Sqlite Yii2:如何在同一条记录的两列中获取具有相同非空数据的表列

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_

我想使用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_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格式..希望有用