繁体   English   中英

mysql中的多对多查询

[英]many to many query in 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)

在最后一张表中,如果请求者是rol,则为0;如果请求者是rol,则为1。

征求(请求)是对特定部门(在这种情况下为支持部门)的请求。 我正在制作一个仪表板,管理员可以在其中查看所有“请求”,其中显示了提出请求的人和提出请求的人(最后一个可以超过一个人)。

问题是我找不到一种方法可以在同一行中显示提出请求的人和接受请求的人(最简单的情况)。 最后,表格必须是这样的:

user_who_made_request|asunto|user_who_took_it|state|state_date

我看了其他答案,但无法获得想要的结果。 也许比我想的要简单。 我将不胜感激任何帮助。

尝试这种方式:

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.
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM