2
votes

Comment exclure les résultats en fonction de la condition SQL dans mysql?

Je crée un portail de candidature à un emploi en utilisant Codeigniter et MySQL. J'ai les tableaux suivants:

  • jobs - qui contient la liste des jobs
  • étudiants - qui contient la liste des étudiants
  • jobs_applied - qui contient la liste des emplois appliqués par les étudiants

clé primaire: job_id.

colonnes: job_id , job_name

students Contents

clé primaire: student_id .

Colonnes: student_id , student_name , student_email

jobs_applied

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?


0 commentaires

5 Réponses :


0
votes

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


3 commentaires

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



0
votes

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


2 commentaires

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?



0
votes

Veuillez essayer ceci

SELECT * FROM jobs Where Job_Id not in (Select job_id from jobs_applied where ISNULL(status,'') ='') 


1 commentaires

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 .



1
votes

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


0 commentaires

1
votes

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


0 commentaires