myks92
@myks92
Нашёл решение — пометь вопрос ответом!

Yii Active Query — Как сделать выборку однотипных значений?

Всем привет! У меня есть связующая таблица пользователя и диалога:
$this->createTable('user_dialog', [
            'user_id' => $this->integer(),//Пользователь
            'dialog_id' => $this->integer(),//Доступ к диалогу
            'deleted' => $this->smallInteger(1)->notNull()->defaultValue(0),//Скрыть диалог от пользователя (удалить)
            'PRIMARY KEY(user_id, dialog_id)',
        ]);


Мне необходимо сделать проверку на существование диалога между двумя пользователями ОДНИМ запросом в базу данных. Подскажите правильный запрос из базы. Я делаю так:
$userDialog = UserDialog::find()
                ->where(['user_id' => [$currentUserID, $from_id]])
                ->asArray()
                ->all();


Однако при таком подходе получаю все диалоги этих пользователей. А нужно только вывести только их диалог, а не все.

Пример данных в таблице
user_id | dialog_id | deteled
1 | 1 | 0
2 | 1 | 0
1 | 2 | 0
3 | 2 | 0

Текущая выборка по запросу выше получается такая:
array(3) {
  [0]=>
  array(3) {
    ["user_id"]=>
    string(1) "1"
    ["dialog_id"]=>
    string(2) "1"
    ["deleted"]=>
    string(1) "0"
  }
  [1]=>
  array(3) {
    ["user_id"]=>
    string(1) "1"
    ["dialog_id"]=>
    string(2) "2"
    ["deleted"]=>
    string(1) "0"
  }
  [2]=>
  array(3) {
    ["user_id"]=>
    string(1) "2"
    ["dialog_id"]=>
    string(2) "1"
    ["deleted"]=>
    string(1) "0"
  }
}
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
@balamyt92
; select * from users; --
Я не силён в SQL но по идее должно сработать так:
SELECT a.dialog_id FROM user_dialog as a INNER JOIN user_dialog as b on a.dialog_id = b.dialog_id WHERE a.user_id = 1 AND b.user_id = 2;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы