Получить данные из двух таблиц

У меня есть вопрос о присоединении. В основном есть две таблицы продукт и 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.

LEFT JOIN пробовали?

Lithilion 23.10.2018 11:37

@Lithilion да, к сожалению, он тоже не работает

Sanjit Bhardwaj 23.10.2018 11:39

Не могли бы вы предоставить образцы данных и ожидать результата?

D-Shih 23.10.2018 11:39

если вы хотите получить только данные соответствия, вы должны использовать внутреннее соединение

Sachin Sarola 23.10.2018 11:40

@SachinSarola я не использую внутреннее соединение

Sanjit Bhardwaj 23.10.2018 11:41
«... получить данные с помощью соединения, которое доступно в обеих таблицах, и если не будут получены данные только из первой таблицы». - это определение LEFT JOIN.
Nae 23.10.2018 11:43

@SanjitBhardwaj разместите несколько примеров данных и задайте свой вопрос.

Sachin Sarola 23.10.2018 11:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
58
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вы можете использовать стороннее программное обеспечение, такое как 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 

Другие вопросы по теме