Выбор из разных таблиц

#mysql

#mysql

Вопрос:

У меня есть таблица

 user_task(_id,email,task_id)
  

Таблица

 users(_id int, email varchar(50))
  

Таблица

 tasks(_id,name)
  

И таблица

 subtask(_id,name, task_id)
  

Мне нужны два оператора select

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

У меня нет опыта работы с sql-соединениями. итак, мне нужна некоторая помощь. заранее спасибо

Я думаю, что этот оператор выполнит работу для 1-го оператора, но я не уверен

 SELECT * FROM tasks WHERE _id=
(SELECT task_id FROM user_tasks WHERE email='$email')
  

Ответ №1:

Выберите все задачи для определенного идентификатора электронной почты, к которым вам нужно присоединиться user_tasks и tasks

 select
ut._id,
ut.email,
ut.task_id,
t.name
from user_task ut
join tasks t on t._id = ut.task_id
where ut.email = 'some email id'
  

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

 select  
ut._id ,
ut.email,
ut.task_id,
t.name as task_name,
st._id as sub_task_id,
st.name as sub_task_name
from subtask st
join tasks t on t._id = st.task_id
join user_task ut on ut.task_id = t._id
where ut.email = 'some email id'
  

ОБНОВЛЕНИЕ После обновления вопроса я вижу, что есть user таблица, и вы сохраняете идентификатор электронной почты в user_task , я бы рекомендовал сохранить идентификатор пользователя в таблице user_task , чтобы, если пользователь изменит идентификатор электронной почты, это не создало никаких проблем для связанных таблиц, и вам просто нужно соединить user таблицу с user_tasks таблицей, используя идентификатор.

Итак, если бы вы сохранили user_id в user_task таблице вместо email , запросы выглядели бы как

 select
u.id as user_id,
u.email,
ut.task_id,
t.name
from user_task ut
join user u on u._id = ut.user_id
join tasks t on t._id = ut.task_id
where u.email = 'some email id'
  

и

 select  
u._id as user_id,
u.email,
ut.task_id,
t.name as task_name,
st._id as sub_task_id,
st.name as sub_task_name
from subtask st
join tasks t on t._id = st.task_id
join user_task ut on ut.task_id = t._id
join user u on u._id = ut.user_id
where u.email = 'some email id'
  

Ответ №2:

 SELECT "tasks".* FROM "tasks" 
INNER JOIN "user_tasks" ON "user_tasks"."task_id" = "tasks"."id" 
INNER JOIN "subtask" ON "subtask"."task_id" = "tasks"."id"
  

Вы можете изменять наборы данных INNER JOIN в OUTER JOIN и манипулировать ими с помощью объединений

Смотрите здесь:http://www.tutorialspoint.com/mysql/mysql-using-joins.htm

Ответ №3:

Попробуйте с ВНУТРЕННИМ СОЕДИНЕНИЕМ

 SELECT *
FROM tasks T
INNER JOIN user_tasks UT ON T._id = UT.task_id
WHERE UT.email='$email'
  

Ответ №4:

ВЫБЕРИТЕ * ИЗ задач tsk ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ пользовательских задач usr_tsk В tsk._id = usr_tsk.task_id ГДЕ usr_tsk.email=’$email’;