Как вы получаете данные во внешнем ключе MYSQL?

   user
---------------------------
userid        name 
---------------------------
1             ...
2             ...
3             ...


item
---------------------------
itemid        category
---------------------------
1             ...
2             ...
3             ...


request
---------------------------
requestid   itemid        userid
---------------------------
1             ...         ...
2             ...         ...
3             ...         ...

Я хочу получить все категории в таблице элементов, которые равны категориям в таблице запросов определенного пользователя.

например, пользователь запрашивает элемент с категорией «математика», я хочу получить все элементы в таблице элементов с категорией «математика».

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью соединений:

select i1.*
from request r 
inner join item i on r.itemid = i.itemid
inner join item i1 on i1.category = i.category
where r.userid = ?

Логика заключается в том, чтобы выбрать все запросы с заданным идентификатором пользователя и вывести соответствующие элементы. Затем вы можете присоединиться еще раз для предметов, принадлежащих к той же категории.

В зависимости от ваших данных это может привести к дублированию. Если это так, exists, вероятно, более уместно:

select i1.*
from item i1
where exists (
    select 1
    from request r 
    inner join item i on r.itemid = i.itemid
    where r.userid = ? and i.category = i1.category
)
i1 — это псевдоним таблицы для item. i1.* выбирает все столбцы этой таблицы.
GMB 12.12.2020 03:07

Другие вопросы по теме