Запрос многие ко многим в mysql

У меня есть две таблицы:

пользователи

user_id INT(11) PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(45) NOT NULL,
user_pass VARCHAR(255) NOT NULL,
user_mail VARCHAR(100) NOT NULL,
user_dpto VARCHAR(100) NOT NULL,
user_resp BOOLEAN NOT NULL,
token VARCHAR(100)

заботы

sol_id INT(11) PRIMARY KEY AUTO_INCREMENT,
random_number INT(11) NOT NULL,
asunto VARCHAR(45) NOT NULL,
emision_date DATETIME NOT NULL,
state VARCHAR(45) NOT NULL,
state_date DATETIME NOT NULL,
tercero BOOLEAN NOT NULL,
nombre_tercero VARCHAR(100),
fecha_solicitud_tercero DATE,
fecha_limite DATE

И users_solicitudes

user_id INT(11),
sol_id INT(11),
rol BOOLEAN,
PRIMARY KEY (user_id, sol_id)

В этой последней таблице роль равна 0, если человек сделал запрос, или 1, если это человек, который его принял.

Запросы (запросы) — это запросы, сделанные в определенный отдел (в данном случае отдел поддержки). Я делаю панель инструментов, где администратор может видеть все «заботы», где он показывает человека, который сделал запрос, и человека, который принял этот запрос (последним может быть более одного человека).

Проблема в том, что я не могу найти способ сделать запрос, чтобы показать в одной строке человека, который сделал запрос, и человека, который его принял (самый простой случай). В итоге таблица должна быть примерно такой:

user_who_made_request|asunto|user_who_took_it|state|state_date

Я просмотрел другие ответы, но не могу получить желаемый результат. Может быть проще, чем я думаю. Буду признателен за любую помощь.

Вы можете присоединяться к одной и той же таблице несколько раз, используя псевдонимы. Что у вас есть до сих пор?

jeroen 21.02.2019 14:21

Вы можете изменить таблицу users_solicitudes, чтобы у вас были request_user_id и take_user_id. После этого очень просто манипулировать данными как хотите

Kristijan Mikulec 21.02.2019 14:23

Что такое sol_id в таблице users_solicitudes?

Refilon 21.02.2019 14:28

Я бы сохранил пользователя, который настроил заботу/сделал запрос, в таблице тот "заботливость", так как там может быть только один. Тогда бы у вас вообще не было бы проблем. (Теперь вы сохраняете отношение 1:1 в дополнительной таблице, смешанное с отношением 1:n)

Jeff 21.02.2019 14:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуйте так:

CREATE TABLE users (
  user_id INT(11) PRIMARY KEY AUTO_INCREMENT,
  user_name VARCHAR(45) NOT NULL,
  user_pass VARCHAR(255) NOT NULL,
  user_mail VARCHAR(100) NOT NULL,
  user_dpto VARCHAR(100) NOT NULL,
  user_resp BOOLEAN NOT NULL,
  token VARCHAR(100)
);

CREATE TABLE solicitudes (
  sol_id INT(11) PRIMARY KEY AUTO_INCREMENT,
  random_number INT(11) NOT NULL,
  asunto VARCHAR(45) NOT NULL,
  emision_date DATETIME NOT NULL,
  state VARCHAR(45) NOT NULL,
  state_date DATETIME NOT NULL,
  tercero BOOLEAN NOT NULL,
  nombre_tercero VARCHAR(100),
  fecha_solicitud_tercero DATE,
  fecha_limite DATE
);

CREATE TABLE user_solicitudes(
  us_id INT AUTO_INCREMENT PRIMARY KEY,
  req_user_id INT(11),
  took_user_id INT(11),
  sol_id INT(11),
  rol BOOLEAN
);
Ответ принят как подходящий

Если только один пользователь на запрос может сделать этот запрос, нет необходимости хранить его в дополнительной таблице. Сохраните дополнительную таблицу для пользователей, которые брать запрос.

Я бы устранил вашу проблему при настройке таблиц таким образом:

CREATE TABLE solicitudes (
  sol_id INT(11) PRIMARY KEY AUTO_INCREMENT,
  user_id INT(11) NOT NULL,  // the user who makes that request
  random_number INT(11) NOT NULL,
  asunto VARCHAR(45) NOT NULL,
  emision_date DATETIME NOT NULL,
  state VARCHAR(45) NOT NULL,
  state_date DATETIME NOT NULL,
  tercero BOOLEAN NOT NULL,
  nombre_tercero VARCHAR(100),
  fecha_solicitud_tercero DATE,
  fecha_limite DATE
);

CREATE TABLE user_solicitudes(
  user_id INT(11),
  sol_id INT(11)
  // rol BOOLEAN - no need for the role field anymore, as you'd only store those who took the request here.
);

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