2011-05-19 140 views
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; 

回答

1

你有沒有想過打破查詢下來的?您可以創建一個包含部分查詢的臨時表,然後用第二個查詢完成初始查詢的另一部分!

我不相信活躍的記錄類有任何東西來創建臨時表,所以你需要手動做。

我也可以看到查詢被分解成小塊,並使用PHP做一些比較,併爲您計算。

否則,一些示例數據和表創建信息可能很有用,所以我們也可以嘗試查詢。

+1

我翻遍了你的數據,得出結論,你的問題是有六個視圖,其中company_job_id = 1。然後,每次運行時在company_views上創建一個匹配結果集,然後增加類似的數量每次匹配company_views.company_job_id = jobs.employer_id。我會做一個較小的查詢,並使用PHP來達到你想要的正確數量。我自己無法幫助您處理查詢,我希望看到它完成,但無法獲得您要查找的內容。 – grantk 2011-05-19 13:56:05