2014-07-04 4 views
0

Je tableauChoisissez parmi les différentes tables

user_task(_id,email,task_id) 

Tableau

users(_id int, email varchar(50)) 

Tableau

tasks(_id,name) 

et table

subtask(_id,name, task_id) 

Je besoin de deux instructions select

  1. Sélectionner toutes les tâches de certains utilisateurs par email
  2. Sélectionnez cet utilisateur de sous-tâches

Ne pas avoir de l'expérience dans sql-joint. donc j'ai besoin d'aide. merci à l'avance

Je pense que cette déclaration fera le travail pour la 1ère déclaration, mais je ne suis pas sûr

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

Répondre

2

Sélection de toutes les tâches d'un identifiant de messagerie que vous devez rejoindre user_tasks et 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' 

Sélection des sous-tâches liées à l'utilisateur que vous devez joindre à toutes les tables quelque chose comme

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' 

MISE à jOUR Après la question mise à jour, je vois qu'il ya la table user et vous stockez EMAILID à user_task, je recommande de stocker l'ID utilisateur dans la table user_task de sorte que si l'utilisateur modifie l'adresse e-mail, il ne créera aucun problème pour les tables liées et vous devez simplement joindre la table user à table user_tasks en utilisant l'ID.

Donc, si vous avez enregistré le user_id dans la table user_task au lieu de email les requêtes auraient ressemblé

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' 

et

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' 
+0

merci beaucoup! –

0

Essayez avec INNER JOIN

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

Vous pouvez changer INNER JOIN à OUTER JOIN et manipuler les ensembles de données en utilisant des jointures

Voir ici: http://www.tutorialspoint.com/mysql/mysql-using-joins.htm

0

SELECT * FROM tâches TSK INNER JOIN user_tasks usr_tsk ON tsk._id = usr_tsk.task_id WHERE usr_tsk.email = '$ email';

Questions connexes