У меня есть вопрос о присоединении. В основном есть две таблицы продукт и product_boost. Таблица product_boost имеет product_id в качестве внешнего ключа, который также находится в таблице продукт.
Я хочу получить данные с помощью соединения, которое доступно в обеих таблицах, и если будут приходить не только данные из первой таблицы.
Я использую правое внешнее соединение, вот мой запрос
SELECT * FROM `vefinder_product`
RIGHT OUTER JOIN `vefinder_product_boost` ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id`
WHERE `vefinder_product`.`status` = 1
AND `vefinder_product`.`post_type` != 5
AND `vefinder_product`.`country` IN('348')
AND `vefinder_product`.`product_stock` >0
AND `vefinder_product`.`product_in_stock` = 1
AND `vefinder_product_boost`.`target_age_from` >= 20
AND `vefinder_product_boost`.`target_age_to` <= 40
ORDER BY `vefinder_product`.`is_boosted` DESC,
`vefinder_product`.`is_sponsered` DESC,
`vefinder_product`.`created_date` DESC LIMIT 21
Как я могу добиться желаемого, ведь это не работает. Я использую codeigniter php.
@Lithilion да, к сожалению, он тоже не работает
Не могли бы вы предоставить образцы данных и ожидать результата?
если вы хотите получить только данные соответствия, вы должны использовать внутреннее соединение
@SachinSarola я не использую внутреннее соединение
LEFT JOIN.
@SanjitBhardwaj разместите несколько примеров данных и задайте свой вопрос.






вы можете использовать стороннее программное обеспечение, такое как SQLyog. это очень просто для запроса соединения, просто создайте запрос с пользовательским интерфейсом и назначьте отношение к этим полям между таблицами. в sqlyog вы можете получать данные из нескольких таблиц, а не только из двух. потому что в настоящее время я использую это программное обеспечение для экономии времени.
Left join, если вы хотите получить все данные из первой (крайней левой) таблицы.Where в таблицах, кроме первой таблицы (крайняя слева), должны быть переведены в условие ON в Left Join. В противном случае Where также отфильтровал бы несовпадающие строки (null в таблицах справа).Вместо этого попробуйте следующее:
SELECT *
FROM `vefinder_product`
LEFT OUTER JOIN `vefinder_product_boost`
ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id` AND
`vefinder_product_boost`.`target_age_from` >= 20 AND
`vefinder_product_boost`.`target_age_to` <= 40
WHERE `vefinder_product`.`status` = 1 AND
`vefinder_product`.`post_type` != 5 AND
`vefinder_product`.`country` IN('348') AND
`vefinder_product`.`product_stock` >0 AND
`vefinder_product`.`product_in_stock` = 1
ORDER BY `vefinder_product`.`is_boosted` DESC,
`vefinder_product`.`is_sponsered` DESC,
`vefinder_product`.`created_date` DESC
LIMIT 21
Используйте левое соединение и поместите условие where в предложение ON
SELECT * FROM `vefinder_product`
left OUTER JOIN `vefinder_product_boost` ON `vefinder_product_boost`.`product_id`=`vefinder_product`.`product_id`
and `vefinder_product`.`status` = 1
AND `vefinder_product`.`post_type` != 5
AND `vefinder_product`.`country` IN('348')
AND `vefinder_product`.`product_stock` >0
AND `vefinder_product`.`product_in_stock` = 1
AND `vefinder_product_boost`.`target_age_from` >= 20
AND `vefinder_product_boost`.`target_age_to` <= 40
ORDER BY `vefinder_product`.`is_boosted` DESC,
`vefinder_product`.`is_sponsered` DESC,
`vefinder_product`.`created_date` DESC LIMIT 21
LEFT JOINпробовали?