В диалоге «многие ко многим» MySql DB мне нужно выбрать все ресурсы (документы с названиями), которые относятся к категориям в списке (категории с идентификатором 9,10 в приведенном ниже примере).Выделить все связанные значения в отношениях «многие-ко-многим»
Вот модель:
Однако, и это главное: для каждого ресурса, я хочу также получить все категории, ресурс, связанные с ним - не только которые запрашиваются для ... Итак, если ресурс с заголовком: title_1, например, соответствует категориям с идентификаторами 9 и 10, но если этот ресурс действительно также имеет категории 11 и 12, я бы хотел получить эту информацию.
Итак, для запроса, запрашивающего ресурс, где категория соответствует 9 или 10, мне нужен этот ресурс и все его связанные категории. Т.е. информации мне нужно для такого ресурса: название
ресурса: title_1 категория: 9,10,11,12
Даже если я только уточнил, что это необходимо, чтобы соответствовать 9 и 10 в запросе ...
Причина этого заключается в том, что если пользователь выполняет поиск по нескольким категориям, результаты должны по-прежнему предоставлять всю информацию об этом объекте относительно всех категорий, установленных на нем.
То, что я до сих пор это:
SELECT
r.title,
cr.category_id
FROM
category_resource cr
INNER JOIN resource r
ON cr.resource_id = r.id
WHERE cr.category_id IN (9,10)
Это дает мне строки с ресурсами, помеченных с любым из них, очень быстро (около 10 мс) из БД 5000 строк. В результате 3 названия:
title_1, категория: 9 title_1, категория 10 title_2, категория: 10
Т.е., я получаю два результата для TITLE_1, потому что она имеет как категории 9 и 10. Но я получаю только эти две категории, потому что они были в запросе. Но это не дает мне другие категории, связанные с ресурсом title_1.
Обратите внимание, что я задал аналогичный вопрос раньше, но не совсем. Я получил ответ на этот вопрос, который разрешил его. Но он стал слишком сложным, и мне нужно было перефразировать его, а также дать ему другой подход. Дело здесь: мне нужно получить эту информацию, но она также должна быть почти такой же быстрой, как и текущий более простой запрос, например, около 10 мс. Это может потребовать многого, но в то же время требование не кажется слишком надуманным для меня для базы данных? Т.е. получить элемент, соответствующий критерию, и получить все значения, связанные с ним из таблицы взаимосвязей «многие ко многим» ...
Будучи далеко не экспертом в этой области, мне все равно кажется, что должны быть созданы реляционные базы данных для обработки запросов по отношениям ... поэтому я чувствую, что должно быть простое и эффективное решение этой проблемы, и я просто надеюсь, что смогу объяснить это достаточно ясно ...
Спасибо, вам нужно немного протестировать его, но, похоже, он работает очень хорошо! Не могли бы вы добавить, как изменить это, чтобы требовать, чтобы cr. category_id также должна соответствовать ALL в списке (9,10)? Это еще один вариант, который мне нужен ... Я знаю, что это обычно делается путем добавления чего-то вроде HAVING COUNT (DISTINCT cr.category_id) = 2 (для списка из двух значений), но я попытался, и я не могу совместить это с чтобы получить действительное заявление ... – Anders
Отлично работает, большое спасибо! – Anders