Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 31-05-2005 10:44:32

palmivore
Modérateur global
Lieu: 49 - Maine et Loire
Date d'inscription: 07-04-2005
Messages: 1783
Site web

[résolu] Aide sur requête MySQL

Salut,

J'ai une petite requête que je n'arrive pas à monter...

Préambule :

J'ai deux tables job_skills et users_job_skills dont voici les structures:

job_skills
Job_Skill_id  int(11)
Skill  char(255)
Description  char(255)

users_job_skills
Users_Job_Skills_id  int(11)
User_id  int(11)
Job_skill_id  int(11)
Value  enum('Yes', 'No')

Ce que je veux faire:
Je dois ressortir la liste complète des job_skills (1ère table) avec la 'Value' de la seconde table pour un certain utilisateur ($_SESSION['user_id']).

J'ai bien réussi à afficher tous les champs mais je n'ai pas les lignes pour lesquelles 'Value' est NULL. Pour cela, la requête est :

Code:

SELECT `job_skills`.*, `users_job_skills`.`Value`
FROM job_skills, users_job_skills
WHERE (`job_skills`.`Job_Skill_id` = `users_job_skills`.`Job_Skill_id`)

Le but de la page:
L'utilisateur, une fois connecté au site vient sur cette page. Il consulte la liste complète des job skills et doit choisir (via des cases à cocher) celles pour lesquelles il possède les compétences nécéssaires.

Cette page doit également pouvoir permettre à l'utilisateur de modifier les choix déjà faits.

Qqun pourrait-il m'aider à pondre la requête ?

Hors ligne

 

#2 31-05-2005 16:26:55

palmivore
Modérateur global
Lieu: 49 - Maine et Loire
Date d'inscription: 07-04-2005
Messages: 1783
Site web

Re: [résolu] Aide sur requête MySQL

Bon bah j'avance tout seul alors smile

J'arrive à sortir les données qui ne sont pas présentes dans la deuxième table avec

Code:

SELECT job_skills.* FROM job_skills
LEFT JOIN users_job_skills ON job_skills.Job_Skill_id=users_job_skills.Job_Skill_id
WHERE users_job_skills.Job_Skill_id IS NULL

Bien sur si je mets IS NOT NULL, j'ai l'inverse... comment faire pour tout avoir ?

Hors ligne

 

#3 31-05-2005 17:43:48

kazhar
Ex-Webmaster
Lieu: Orléans
Date d'inscription: 25-06-2004
Messages: 3381
Site web

Re: [résolu] Aide sur requête MySQL

c'est juste une proposition comme ca

Code:

SELECT job_skills.* FROM job_skills
LEFT JOIN users_job_skills ON job_skills.Job_Skill_id=users_job_skills.Job_Skill_id
WHERE users_job_skills.Job_Skill_id IS NULL
OR users_job_skills.Job_Skill_id IS NOT NULL

Hors ligne

 

#4 01-06-2005 02:23:00

palmivore
Modérateur global
Lieu: 49 - Maine et Loire
Date d'inscription: 07-04-2005
Messages: 1783
Site web

Re: [résolu] Aide sur requête MySQL

Oais, en fait je n'ai pas reposté mais j'en était rendu dans ces eaux là.

En fait maintent mon problème a un peu varié. Cette requête fonctionne mais dès que je veux afficher des valeurs de la seconde table, ca ne fonctionne pas. Le message d'erreur est 'Table2 Not unique table/alias'

Hors ligne

 

#5 01-06-2005 08:08:08

palmivore
Modérateur global
Lieu: 49 - Maine et Loire
Date d'inscription: 07-04-2005
Messages: 1783
Site web

Re: [résolu] Aide sur requête MySQL

:idea: ca y'est, j'ai trouvé  big_smile

Code:

SELECT job_skills . * , users_job_skills.Value
FROM job_skills

LEFT JOIN users_job_skills ON job_skills.Job_Skill_id = users_job_skills.Job_Skill_id

WHERE NOT EXISTS 
(
SELECT * FROM users_job_skills 
WHERE User_id = '2'
)
OR EXISTS 
(
SELECT * 
FROM users_job_skills
WHERE User_id = '2'
)

Je viens de découvrir l'utilité des sous-requêtes.. Elle est pas belle la vie ?  wink

Hors ligne

 

#6 01-06-2005 08:57:12

kazhar
Ex-Webmaster
Lieu: Orléans
Date d'inscription: 25-06-2004
Messages: 3381
Site web

Re: [résolu] Aide sur requête MySQL

cool smile
je vais essayer d'analyser ca smile

Hors ligne

 

#7 03-06-2005 10:21:15

palmivore
Modérateur global
Lieu: 49 - Maine et Loire
Date d'inscription: 07-04-2005
Messages: 1783
Site web

Re: [résolu] Aide sur requête MySQL

Juste pour info, les sous requêtes ne servent à rien dans ce cas. Si on veux voir apparaitre les lignes qui n'ont pas de correspondance dans la deuxième table, il faut passer le critère de recherche dans le ON du LEFT JOIN :

Code:

SELECT job_skills.*, users_job_skills.Value FROM job_skills LEFT JOIN users_job_skills ON (job_skills.Job_Skill_id=users_job_skills.Job_Skill_id AND users_job_skills.User_id = '$Current_User')

Bon à savoir....

Hors ligne