2012-07-15 2 views
0

나는 데이터베이스에 5 개 테이블이 도움이 필요, 여기에 MySQL의 코드입니다 :mysql과 php를 사용하여 데이터를 어떻게 일치시킬 수 있습니까?

CREATE TABLE IF NOT EXISTS `candidate` (
    `CID` int(4) NOT NULL AUTO_INCREMENT, 
    `title` varchar(5) NOT NULL, 
    `fname` varchar(30) NOT NULL, 
    `lname` varchar(30) NOT NULL, 
    `dob` date NOT NULL, 
    `email` varchar(50) NOT NULL, 
    `address` varchar(255) NOT NULL, 
    `city` varchar(50) NOT NULL, 
    `postcode` varchar(10) NOT NULL, 
    `phone_num` varchar(11) NOT NULL, 
    `username` varchar(40) NOT NULL, 
    `password` varchar(40) NOT NULL, 
    `regdate` datetime NOT NULL, 
    `acc_type` enum('c','s') NOT NULL DEFAULT 'c', 
    `emailactivate` enum('0','1') NOT NULL DEFAULT '0', 
    `cv_name` varchar(60) NOT NULL, 
    `cv` blob NOT NULL, 
    PRIMARY KEY (`CID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='// this is the table for the candidates' AUTO_INCREMENT=175 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `candidate_skill` 
-- 

CREATE TABLE IF NOT EXISTS `candidate_skill` (
    `CSID` int(4) NOT NULL AUTO_INCREMENT, 
    `CID` int(4) NOT NULL, 
    `S_CODE` int(4) NOT NULL, 
    PRIMARY KEY (`CSID`), 
    KEY `CID` (`CID`), 
    KEY `S_CODE` (`S_CODE`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='//match candidate and skill' AUTO_INCREMENT=102 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `job` 
-- 

CREATE TABLE IF NOT EXISTS `job` (
    `JID` int(4) NOT NULL AUTO_INCREMENT, 
    `job_title` varchar(40) NOT NULL, 
    `job_desc` varchar(255) NOT NULL, 
    `start_date` date NOT NULL, 
    `end_date` date NOT NULL, 
    PRIMARY KEY (`JID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='// this is the table for the job vacancies' AUTO_INCREMENT=10 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `skill` 
-- 

CREATE TABLE IF NOT EXISTS `skill` (
    `S_CODE` int(4) NOT NULL AUTO_INCREMENT COMMENT '// this is the skill primary key', 
    `skill_name` varchar(40) NOT NULL, 
    `skill_desc` varchar(255) NOT NULL, 
    PRIMARY KEY (`S_CODE`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `skill_job` 
-- 

CREATE TABLE IF NOT EXISTS `skill_job` (
    `SJID` int(4) NOT NULL AUTO_INCREMENT, 
    `JID` int(4) NOT NULL, 
    `S_CODE` int(4) NOT NULL, 
    PRIMARY KEY (`SJID`), 
    KEY `S_CODE` (`S_CODE`), 
    KEY `JID` (`JID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=94 ; 

그리고 이것은 나에게 문제가주는 쿼리입니다 :

$query = ("SELECT * FROM candidate, candidate_skill, job, skill, skill_job WHERE candidate_skill.S_CODE=skill_job.S_CODE AND skill.S_CODE=candidate_skill.S_CODE AND candidate.CID=candidate_skill.CID AND job.JID = skill_job.JID"); 

$result = mysql_query ($query); 
$candidate_id ='';  
$canskill =''; 
     while ($result = mysql_fetch_array ($res)){ 
      $candidate_id .= $r['CID']; 
      $canskill .= $r ['S_CODE']; 


      } 
     } 


     } 
    echo $candidate_id; 

내가하려고 해요을 후보자와 일자리를 자신의 기술을 사용하여 일치시키고 나는 일종의 성공했지만 후보자가 일자리와 일치하는 경우에만 한 가지 기술 만 있고 일자리는 예를 들어 세 가지 기술이 있습니다. 며칠 동안 검색, 테스트 및 레코딩했기 때문에 누군가가 올바른 방향으로 나를 가리 키도록 할 수 있습니까?이 문제를 넘어 서지 못했습니다.

답변

0

당신은 단순한 참여를하고 있기 때문에 나열된 기술이 일치합니다. 필요한 기술이 얼마나 많이 매치되는지 실제로 계산해야하며이를 사용하여 쿼리 결과를 필터링해야합니다.

SELECT ..., COUNT(skill_job.id) AS cnt 
FROM .... 
WHERE ... 
HAVING (cnt = 3) 

이 This'd 정확히 3 필요한 기술을 가지고 후보자에 제한 :

전체 쿼리를 rejiggering없이, 뭔가 같은 것. '최소 2 개 이상'또는 이와 유사한 유형을 원하면

HAVING (cnt >= 2) 

등으로 다른 유사 콘텐츠를 사용할 수 있습니다.

+0

형제님께 감사 드리며 저를 구해 주셨습니다 : –

+0

전체 검색어를 어떻게 재구성 할 수 있는지 알려주십시오. –

관련 문제