0

データベースに 5 つのテーブルがあるので、助け が必要です。mysql コードは次のとおりです。

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;

私はスキルを使用して候補者と仕事を一致させようとしていますが、ある程度成功しましたが、候補者がスキルを 1 つしか持っておらず、たとえば 3 つのスキルを持っている場合でも、候補者を仕事と一致させています。何日も検索、テスト、再コーディングしましたが、この問題を乗り越えられないので、誰かが私を正しい方向に向けることができますか

4

1 に答える 1

0

単純な参加をしているので、リストされているスキルの1つでも持っている候補者が一致します。必要なスキルがいくつ一致するかを実際に数え、それを使用してクエリ結果をフィルタリングする必要があります。

クエリ全体を再調整しないと、次のようになります。

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

これは、必要なスキルを正確に3つ持っている候補者に限定されます。「少なくとも2つ」または同様のタイプが必要な場合は、

HAVING (cnt >= 2)

他のバリエーション用もあります。

于 2012-07-15T05:38:18.870 に答える