Forum de discussion et d'aide au php
Vous n'êtes pas identifié.
|
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. |
||
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 :
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
Bon bah j'avance tout seul alors
J'arrive à sortir les données qui ne sont pas présentes dans la deuxième table avec
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
c'est juste une proposition comme ca
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
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
:idea: ca y'est, j'ai trouvé
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 ? ![]()
Hors ligne
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 :
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