会社やその詳細、取引が存在しない場合でも参加しようとしています。別のテーブルからカウントを選択しているときに左結合が機能していない
私はコースに行くユーザーの数を計上するためにトランザクションをカウントしています。トランザクションがない場合、会社と詳細に参加したいが、カウントは0になります。training_companyテーブルより下のクエリ選択したが、training_detailsが何らかの理由で選択されていない:
SELECT training.*, count(distinct training_transactions.training_transaction_course) as completed_training_payments
FROM training
LEFT JOIN training_company
ON training.course_main = training_company_id
LEFT JOIN training_details
ON training.course_main = training_details_company
LEFT JOIN training_transactions
ON training.course_user = training_transactions.training_transaction_user
WHERE course_id = ?
AND training_transactions.training_transaction_status = 'complete'
AND training_transactions.training_transaction_payment_status = 'complete'
AND course_enabled = 'enabled'
training_company:
CREATE TABLE IF NOT EXISTS `training_company` (
`training_company_id` int(11) NOT NULL,
`training_company_name` varchar(100) NOT NULL,
`training_company_user` int(11) NOT NULL,
`training_company_enabled` varchar(50) NOT NULL DEFAULT 'enabled',
`training_company_has_avatar` int(5) NOT NULL DEFAULT '0',
`training_company_has_banner` int(5) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `training_company`
--
INSERT INTO `training_company` (`training_company_id`, `training_company_name`, `training_company_user`, `training_company_enabled`, `training_company_has_avatar`, `training_company_has_banner`) VALUES
(1, '123', 1, 'enabled', 0, 0),
training_details:
CREATE TABLE IF NOT EXISTS `training_details` (
`training_details_id` int(11) NOT NULL,
`training_details_user` int(11) NOT NULL,
`training_details_company` int(11) NOT NULL,
`training_details_registration_number` varchar(10) NOT NULL,
`training_details_type` varchar(100) NOT NULL,
`training_details_name` varchar(100) NOT NULL,
`training_details_street` varchar(100) NOT NULL,
`training_details_town` varchar(100) NOT NULL,
`training_details_county` varchar(100) NOT NULL,
`training_details_postcode` varchar(100) NOT NULL,
`training_details_country` varchar(100) NOT NULL,
`training_details_company_name` varchar(100) NOT NULL,
`training_details_company_street` varchar(100) NOT NULL,
`training_details_company_town` varchar(100) NOT NULL,
`training_details_company_county` varchar(100) NOT NULL,
`training_details_company_postcode` varchar(100) NOT NULL,
`training_details_company_country` varchar(100) NOT NULL,
`training_details_total_employees` varchar(100) NOT NULL,
`training_details_fax` varchar(100) NOT NULL,
`training_details_landline` varchar(100) NOT NULL,
`training_details_mobile` varchar(50) NOT NULL,
`training_details_email` varchar(50) NOT NULL,
`training_details_website` varchar(250) NOT NULL,
`company_differs_address` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `training_details`
--
INSERT INTO `training_details` (`training_details_id`, `training_details_user`, `training_details_company`, `training_details_registration_number`, `training_details_type`, `training_details_name`, `training_details_street`, `training_details_town`, `training_details_county`, `training_details_postcode`, `training_details_country`, `training_details_company_name`, `training_details_company_street`, `training_details_company_town`, `training_details_company_county`, `training_details_company_postcode`, `training_details_company_country`, `training_details_total_employees`, `training_details_fax`, `training_details_landline`, `training_details_mobile`, `training_details_email`, `training_details_website`, `company_differs_address`) VALUES
(1, 0, 1, '0', '', '123', '123', '123', '123456', 'WN8', 'Australia', '123', '123', '123', '', 'WN8', 'Australia', '', '', '', '', '', '', 4),
訓練:
CREATE TABLE IF NOT EXISTS `training` (
`course_id` int(11) NOT NULL,
`course_user` int(11) NOT NULL,
`course_main` int(11) NOT NULL,
`course_type` varchar(255) NOT NULL,
`course_name` varchar(255) NOT NULL,
`course_description` text NOT NULL,
`course_location` varchar(255) NOT NULL,
`course_duration` varchar(255) NOT NULL,
`course_fitness_type` varchar(255) NOT NULL,
`course_instructor_name` varchar(255) NOT NULL,
`course_price` int(15) NOT NULL,
`course_start_date` date NOT NULL,
`course_max_attendees` int(8) NOT NULL,
`course_accommodation` varchar(255) NOT NULL,
`course_accommodation_price` varchar(255) NOT NULL,
`course_status` varchar(50) NOT NULL,
`course_enabled` varchar(10) NOT NULL DEFAULT 'enabled',
`course_location_name` varchar(255) NOT NULL,
`course_location_street` varchar(255) NOT NULL,
`course_location_town` varchar(255) NOT NULL,
`course_location_county` varchar(255) NOT NULL,
`course_location_postcode` varchar(255) NOT NULL,
`course_location_country` varchar(255) NOT NULL,
`course_certificate` varchar(250) NOT NULL,
`course_certificate_valid` int(30) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `training`
--
INSERT INTO `training` (`course_id`, `course_user`, `course_main`, `course_type`, `course_name`, `course_description`, `course_location`, `course_duration`, `course_fitness_type`, `course_instructor_name`, `course_price`, `course_start_date`, `course_max_attendees`, `course_accommodation`, `course_accommodation_price`, `course_status`, `course_enabled`, `course_location_name`, `course_location_street`, `course_location_town`, `course_location_county`, `course_location_postcode`, `course_location_country`, `course_certificate`, `course_certificate_valid`) VALUES
(1, 3, 1, 'Hazardous', '123', 'dddddddddddddd', 'other', '14', 'lol', 'lol', 123, '2015-11-09', 4, '0', '', 'pending', 'enabled', '123', '123', '123', '123456', '123', 'Australia', '123', 2),
だから私は得ることができますどのように私の瞬間に、それが参加されていないため、すべてが
'left join'はうまく動作します。条件を 'where'節から' on'節に移す必要があります。率直に言えば、「左結合」と「右結合」を混在させたクエリに従うのは本当に難しいですが、どの条件がどこに行くのかを把握できるようにクエリを理解する必要があります。 –
あなたの散文は、残されたものではなく、会社への正しい参加を望むことを示唆しています。 –
は、私は上の無い表情で、右の参加に追加しようとしました:( –