Прошу прощения за такой, возможно, тупой вопрос, но я что-то застопорился.
Есть 3 таблицы: авторы, книги и перемычка. Многие ко многим.
Нужно выбрать те книги, которые связаны с перечнем авторов.
Не по принципу: Горький + Толстой = Воробьишко и Война с миром.
А по принципу: Желязны + Шекли = История Рыжего демона.
Т.е. нужно выбрать книги, в которых отметились сразу все авторы из перечня, а не лишь один.
MySQL, выбрать книги нескольких авторов
- Maxim Glushko
- Сообщения: 98
- Зарегистрирован: 2017.04.24, 19:16
- Откуда: Україна, Одеса
Re: MySQL, выбрать книги нескольких авторов
Код: Выделить всё
$query = Book::find();
$list = [
'Желязны',
'Шекли',
];
foreach($list as $key => value) {
$query->joinWith('author author'.$key, false)
->andWhere(['author'.$key.'.name' => $value]);
}
$result = $query->all();
Вот еще вариант:
Код: Выделить всё
$query = Book::find();
$list = [
'Желязны',
'Шекли',
];
foreach($list as $key => value) {
$query->andWhere([
'IN', 'book.id', Author::find()
->select(['id' => 'author_book.book_id'])
->leftJoin('author_book', 'author_book.author_id = author.id')
->andWhere(['name' => $value])
]);
}
$result = $query->all();