Je crée un portail de candidature à un emploi en utilisant Codeigniter et MySQL. J'ai les tableaux suivants:
clé primaire: job_id
.
colonnes: job_id
, job_name
clé primaire: student_id
.
Colonnes: student_id
, student_name
, student_email
clé primaire: jobs_applied_id
.
clé étrangère: job_id
, student_id
.
colonnes: job_id
, student_id
, status
, appliqué_date code>
Dans mon application, lorsqu'un utilisateur postule pour un emploi, je change les colonnes de statut dans jobs_applied
en "en attente". Je souhaite supprimer les travaux appliqués de la liste.
Jusqu'à présent, j'utilise la requête suivante pour lister les emplois.
SELECT * FROM jobs
J'ai essayé d'utiliser INNER JOIN
contre le jobs_applied
, mais je suis coincé dedans. Je ne sais pas comment l'exclure de la liste. J'ai le student_id
dans ma session.
Comment créer une requête qui exclut les emplois appliqués par les étudiants en utilisant student_id
comme condition?
5 Réponses :
Vous pouvez essayer ci-dessous - utilisez la jointure à gauche et la condition where
SELECT a.job_id FROM jobs a LEFT JOIN jobs_applied b ON a.job_id=b.job_id WHERE status IS null
Je veux afficher la liste des travaux à l'exception des travaux auxquels l'utilisateur est déjà appliqué. dans votre requête, il n'y a pas de student_id
pourriez-vous s'il vous plaît ajouter quelques exemples de données et votre sortie attendue au format tableau - il sera alors beaucoup plus facile de comprendre ce que vous voulez @BearNithi
Comment créer une requête qui exclut les emplois appliqués par les étudiants en utilisant student_id
comme condition? Je suis désolé de ne pas savoir comment créer la vue de tableau en question
Si j'ai bien compris votre question, pour conserver une liste des emplois auxquels un étudiant n'a pas postulé, utilisez
select * from jobs j LEFT JOIN jobs_applied ap on j.job_id=ap.jobs_id where ap.jobs_id is null
Je souhaite afficher la liste des emplois à l'exception des emplois auxquels l'étudiant a déjà postulé. dans votre requête, il n'y a pas de student_id
.
Avez-vous des student_id dans les emplois? Pourriez-vous lister toutes les colonnes que vous avez dans vos tables jobs, étudiants et jobs_applied?
Veuillez essayer ceci
SELECT * FROM jobs Where Job_Id not in (Select job_id from jobs_applied where ISNULL(status,'') ='')
Je souhaite afficher la liste des emplois à l'exception des emplois auxquels l'étudiant a déjà postulé. dans votre requête, il n'y a pas de student_id
.
vous pouvez sélectionner tous les emplois qui ne se trouvent pas dans le tableau appliqué (avec l'étudiant souhaité). Le moyen le plus simple à mon humble avis est de sous-sélectionner, comme ceci:
SELECT * FROM jobs as j WHERE j.job_id NOT IN ( SELECT job_id FROM jobs_applied WHERE student_id IN (<student_id>) );
Vous voulez faire LEFT JOIN à jobs_applied en référence à un étudiant spécifique, et là où il n'y a pas de correspondance, jobs_applied. * sera NULL, c'est donc votre condition WHERE.
Voici une démo:
mysql> SELECT j.* -> FROM jobs j LEFT JOIN jobs_applied ap -> ON j.job_id = ap.job_id AND ap.student_id = 200 -> WHERE ap.job_id IS NULL; +--------+ | job_id | +--------+ | 11 | +--------+
L'élève 100 a postulé pour l'emploi 11 et il ne devrait donc voir que l'emploi 22 dans la requête suivante.
mysql> SELECT j.* -> FROM jobs j LEFT JOIN jobs_applied ap -> ON j.job_id = ap.job_id AND ap.student_id = 100 -> WHERE ap.job_id IS NULL; +--------+ | job_id | +--------+ | 22 | +--------+
De même, l'étudiante 200 a postulé pour l'emploi 22, elle ne devrait donc voir le poste 11 qu'après.
mysql> CREATE TABLE `jobs` ( -> `job_id` int NOT NULL, -> PRIMARY KEY (`job_id`) -> ); mysql> INSERT INTO `jobs` VALUES (11),(22); mysql> CREATE TABLE `students` ( -> `student_id` int NOT NULL, -> PRIMARY KEY (`student_id`) -> ); mysql> INSERT INTO `students` VALUES (100),(200); mysql> CREATE TABLE `jobs_applied` ( -> `jobs_applied_id` int NOT NULL, -> `job_id` int DEFAULT NULL, -> `student_id` int DEFAULT NULL, -> `status` int DEFAULT NULL, -> PRIMARY KEY (`jobs_applied_id`), -> KEY `job_id` (`job_id`), -> KEY `student_id` (`student_id`), -> CONSTRAINT `jobs_applied_ibfk_1` FOREIGN KEY (`job_id`) REFERENCES `jobs` (`job_id`), -> CONSTRAINT `jobs_applied_ibfk_2` FOREIGN KEY (`student_id`) REFERENCES `students` (`student_id`) -> ); mysql> INSERT INTO `jobs_applied` VALUES (1,11,100,NULL),(2,22,200,NULL);