2010-06-05 5 views
1

J'ai 3 tables: projets, compétences et project_skills. Dans le tableau des projets, je tiens les données générales du projet. Compétences de deuxième table Je détiens l'identification de compétence et le nom de compétence aussi j'ai la table de projects_skills qui tient les relations de compétence de projet. Voici schéma de tables:Comment puis-je créer cette requête compliquée?

CREATE TABLE IF NOT EXISTS `project_skills` (
    `project_id` int(11) NOT NULL, 
    `skill_id` int(11) NOT NULL, 
    KEY `project_id` (`project_id`), 
    KEY `skill_id` (`skill_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci; 


CREATE TABLE IF NOT EXISTS `projects` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `employer_id` int(11) NOT NULL, 
    `project_title` varchar(100) COLLATE utf8_turkish_ci NOT NULL, 
    `project_description` text COLLATE utf8_turkish_ci NOT NULL, 
    `project_budget` int(11) NOT NULL, 
    `project_allowedtime` int(11) NOT NULL, 
    `project_deadline` datetime NOT NULL, 
    `total_bids` int(11) NOT NULL, 
    `average_bid` int(11) NOT NULL, 
    `created` datetime NOT NULL, 
    `active` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `created` (`created`), 
    KEY `employer_id` (`employer_id`), 
    KEY `active` (`active`), 
    FULLTEXT KEY `project_title` (`project_title`,`project_description`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=3 ; 

CREATE TABLE IF NOT EXISTS `skills` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `category` int(11) NOT NULL, 
    `name` varchar(100) COLLATE utf8_turkish_ci NOT NULL, 
    `seo_name` varchar(100) COLLATE utf8_turkish_ci NOT NULL, 
    `total_projects` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `seo_name` (`seo_name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=224 ; 

Je veux sélectionner les projets avec des noms de compétences connexes. Je pense que je dois utiliser JOIN mais je ne sais pas comment puis-je faire. Merci

+0

Il vaut la peine de lire un tutoriel SQL comme un rappel. http://www.w3schools.com/sql/sql_join.asp –

+0

Veuillez donner un exemple de «noms de compétences connexes». –

+0

Identifiant de compétence - La relation d'identifiant de projet est conservée dans les noms de compétences de projet, mais je souhaite que les noms de compétences soient conservés dans la table des compétences. Je veux dire ces noms de compétences en disant "noms de compétences connexes" – mTuran

Répondre

1

Cela ressemble à un JOIN est tout à fait exact:

SELECT ... 
FROM projects 
INNER JOIN project_skills ON (project_skills.project_id = projects.id) 
INNER JOIN skills ON (skills.id = project_skills.skill_id) 
+0

Cela ne renverra que des projets avec des compétences associées, noms de compétences non liés –

+0

Les noms de compétences sont stockés dans la colonne skills.name; si les noms sont souhaités, cette colonne peut simplement être ajoutée à la liste des champs 'SELECT'ed – VoteyDisciple

1
select * from projects 
left join project_skills on projects.id = project_skills.project_id 
left join skills on project_skills.skills_id = skills .id 

Note: vous n'avez pas besoin de toutes les colonnes, mais cela vous permettra de voir ce qui se passe avant de choisir les colonnes dont vous avez besoin.

+0

Cela ne renverra que des projets avec des compétences associées, pas de noms de compétences connexes –

+0

@OMG: Je crois qu'il retournera compétences.nom s'il vous plaît expliquer – Hogan