0
我有這樣的代碼是從數據庫中拿出一些數據,MySQL的 - 笨活動記錄幫助
$this->db->select('job_id, jobs.employer_id, COUNT(company_job_id) AS views, COUNT(like_job_id) AS likes, logo, company_name')
->from('jobs')
->join('company_likes', 'company_likes.like_job_id = jobs.employer_id', 'left')
->join('company_views', 'company_views.company_job_id = jobs.employer_id', 'left')
->join('employers', 'employers.employer_id = jobs.employer_id', 'left')
->group_by('company_views.company_job_id');
$query = $this->db->get();
return $query->result_array();
我收到一些奇怪的結果,下面是拍攝結果的轉儲看起來當有0喜歡在company_likes表中的記錄和6條在公司的意見表,
Array
(
[0] => Array
(
[job_id] => 1
[employer_id] => 1
[views] => 6
[likes] => 0
[logo] => 11d4df5e2f7db152cd9bcc3782dd03b0.jpg
[company_name] => Test Company
)
)
但是如果我有6條在company_views表,並在該公司1個記錄表喜歡我得到以下,
Array
(
[0] => Array
(
[job_id] => 1
[employer_id] => 1
[views] => 6
[likes] => 6
[logo] => 11d4df5e2f7db152cd9bcc3782dd03b0.jpg
[company_name] => Test Company
)
)
這是因爲如果意見和喜好越來越乘什麼的,我怎麼能做出這樣我得到的是什麼樣的是數據庫中真實再現?
這裏是有問題的數據和表格的出口,
--
-- Table structure for table `company_likes`
--
CREATE TABLE IF NOT EXISTS `company_likes` (
`like_id` int(10) NOT NULL AUTO_INCREMENT,
`like_job_id` int(11) NOT NULL,
PRIMARY KEY (`like_id`),
KEY `fk_company_likes_jobs1` (`like_job_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `company_likes`
--
INSERT INTO `company_likes` (`like_id`, `like_job_id`) VALUES
(1, 1);
-- --------------------------------------------------------
--
-- Table structure for table `company_views`
--
CREATE TABLE IF NOT EXISTS `company_views` (
`view_id` int(10) NOT NULL AUTO_INCREMENT,
`company_job_id` int(11) NOT NULL,
PRIMARY KEY (`view_id`),
KEY `fk_company_views_jobs1` (`company_job_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `company_views`
--
INSERT INTO `company_views` (`view_id`, `company_job_id`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 1),
(5, 1),
(6, 1);
-- --------------------------------------------------------
--
-- Table structure for table `employers`
--
CREATE TABLE IF NOT EXISTS `employers` (
`employer_id` int(11) NOT NULL AUTO_INCREMENT,
`company_name` varchar(80) NOT NULL,
`company_summary` text NOT NULL,
`logo` varchar(60) NOT NULL,
`alternative_ads` varchar(100) DEFAULT NULL,
`facebook_url` varchar(100) DEFAULT NULL,
`twitter_url` varchar(100) DEFAULT NULL,
`user_id` int(10) NOT NULL,
PRIMARY KEY (`employer_id`),
KEY `fk_employers_users` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `employers`
--
INSERT INTO `employers` (`employer_id`, `company_name`, `company_summary`, `logo`, `alternative_ads`, `facebook_url`, `twitter_url`, `user_id`) VALUES
(1, 'Test Company', 'Test company is excatly what it says it is a test company, we have created this test company so that we can see that moovjob is functioning as it should be and that everything is upload, saving, applying and generally saving as we would expect.', '11d4df5e2f7db152cd9bcc3782dd03b0.jpg', 'http://www.simonainley.info/alternative', 'http://www.facebook.com/simon.ainley', 'http://www.twitter.com/simonainley', 2),
(2, 'Test Company', 'Test company summary', '006474cf842654eb28deebec7e4dcbb9.png', 'http://www.simonainley.info/alternative', 'http://www.facebook.com/simon.ainley', 'http://www.twitter.com/simonainley', 5);
-- --------------------------------------------------------
--
-- Table structure for table `jobs`
--
CREATE TABLE IF NOT EXISTS `jobs` (
`job_id` int(11) NOT NULL AUTO_INCREMENT,
`job_title` varchar(80) NOT NULL,
`sectors` varchar(255) NOT NULL,
`salary` varchar(20) NOT NULL,
`retrain` enum('yes','no') NOT NULL,
`bonuses_available` enum('yes','no') NOT NULL,
`bonus_description` text,
`job_summary` text NOT NULL,
`job_description` text NOT NULL,
`employer_id` int(11) NOT NULL,
PRIMARY KEY (`job_id`),
KEY `fk_jobs_employers1` (`employer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `jobs`
--
INSERT INTO `jobs` (`job_id`, `job_title`, `sectors`, `salary`, `retrain`, `bonuses_available`, `bonus_description`, `job_summary`, `job_description`, `employer_id`) VALUES
(1, 'Test Jobtitle', 'Sector 1', '£25,000', 'no', 'yes', 'Bonus Description', 'Job Summary', 'Job Description', 1);
--
-- Constraints for dumped tables
--
--
-- Constraints for table `company_views`
--
ALTER TABLE `company_views`
ADD CONSTRAINT `company_views_ibfk_1` FOREIGN KEY (`company_job_id`) REFERENCES `jobs` (`employer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Constraints for table `employers`
--
ALTER TABLE `employers`
ADD CONSTRAINT `fk_employers_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Constraints for table `jobs`
--
ALTER TABLE `jobs`
ADD CONSTRAINT `fk_jobs_employers1` FOREIGN KEY (`employer_id`) REFERENCES `employers` (`employer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
我翻遍了你的數據,得出結論,你的問題是有六個視圖,其中company_job_id = 1。然後,每次運行時在company_views上創建一個匹配結果集,然後增加類似的數量每次匹配company_views.company_job_id = jobs.employer_id。我會做一個較小的查詢,並使用PHP來達到你想要的正確數量。我自己無法幫助您處理查詢,我希望看到它完成,但無法獲得您要查找的內容。 – grantk 2011-05-19 13:56:05