powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать строгую выборку по списку значений?
6 сообщений из 6, страница 1 из 1
Как сделать строгую выборку по списку значений?
    #39972924
resourceful
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемое сообщество, у кого есть свободная минутка, просьба мочь разобраться.

Чтоб был более понятен мой вопрос, коротко опишу ситуацию.
Есть две таблицы, у каждой две колонки:
• books (id, name)
• books_attribute (book_id, book_attributes_id)

В таблице books_attribute оба поля это внешние ключи. Идея в том, что у одной книги может быть несколько атрибутов.

Вот пример таблиц:

books
Код: plaintext
1.
2.
3.
4.
5.
6.
id	|name
___________
47	|Пушкин
48	|Лермонтов
49	|Достоевский
50	|Толстой

book_attributes
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
book_id	|book_attributes_id
___________
47	|2
47	|3
47	|1
47	|7
48	|2
48	|1
48	|10
48	|3
48	|8
49	|11
49	|1
49	|2
50	|8
50	|7
50	|1

Теперь вопрос .
Как получить определенные book_id, если передаю список значений (айдишников) для book_attributes_id?

Чтоб еще точней.. Если я передаю, например, в where, такие значения book_attributes_id: 2, 3
То должен получить только : 47, 48.

2, 1, 10, 3 = 48
1, 7 = 47, 50

Мое гугленье не дало результатов, или я не правильно искал.
Спасибо!
...
Рейтинг: 0 / 0
Как сделать строгую выборку по списку значений?
    #39972936
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
resourceful
Если я передаю, например, в where, такие значения book_attributes_id: 2, 3
То должен получить только : 47, 48.

Код: sql
1.
2.
3.
WHERE book_attributes_id IN (2, 3)
GROUP BY book_id
HAVING COUNT(DISTINCT book_attributes_id) = 2
...
Рейтинг: 0 / 0
Как сделать строгую выборку по списку значений?
    #39972969
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
resourceful
Чтоб еще точней.. Если я передаю, например, в where, такие значения book_attributes_id: 2, 3
То должен получить только : 47, 48.

2, 1, 10, 3 = 48
1, 7 = 47, 50
Для атрибутов 2, 3 -> book_id = 47, 48, 49. (ваш ответ 47, 48)
Для атрибутов 1, 7 -> book_id = 47, 48, 49, 50. (ваш ответ 47, 50)
У вас ошибка или я не осознал задачу.
...
Рейтинг: 0 / 0
Как сделать строгую выборку по списку значений?
    #39973100
resourceful
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,
авторДля атрибутов 2, 3 -> book_id = 47, 48, 49. (ваш ответ 47, 48)
Для атрибутов 1, 7 -> book_id = 47, 48, 49, 50. (ваш ответ 47, 50)
У вас ошибка или я не осознал задачу.

Задача в том, чтоб получить книги, у которых есть все указанные атрибуты, то есть и 2, и 3.
Так как у 50-й книги нет атрибута 3, то она не подходит под параметры поиска.
Например..
атрибут 2 = мягкий переплет
атрибут 3 = с иллюстрациями

Если я в фильтре запроса указываю, что мне нужно показать только книги, у которых есть "мягкий переплет" И "с иллюстрациями", то мне не должно показывать книги, у которых есть только "мягкий переплет", а иллюстраций нет.
...
Рейтинг: 0 / 0
Как сделать строгую выборку по списку значений?
    #39973101
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
resourceful
Задача в том, чтоб получить книги, у которых есть все указанные атрибуты, то есть и 2, и 3.
Ну тогда мой ответ полностью подходит.
...
Рейтинг: 0 / 0
Как сделать строгую выборку по списку значений?
    #39973169
resourceful
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Большое спасибо за помощь!

Если вам не сложно, подскажите еще, как сделать грамотный запрос, чтоб при таком обращении к таблице book_attributes, получить данные из таблицы books.

Как я понимаю здесь надо работать с join. Но sql не моя сильная сторона, а потому не хотелось бы создавать велосипед.

Спасибо!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать строгую выборку по списку значений?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]