Получить данные из двух таблиц - PullRequest
0 голосов
/ 23 октября 2018

У меня есть вопрос относительно соединения.В основном это две таблицы product и product_boost .Таблица product_boost имеет product_id в качестве внешнего ключа, который также находится в таблице product .

Я хочу получить данные с помощью объединения, которое доступно как втаблицы, а если не только данные из первой таблицы будут приходить.

Я использую правое внешнее объединение, вот мой запрос

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 

Как мне добиться желаемого, потому что это не работает.Я использую php.

Ответы [ 3 ]

0 голосов
/ 23 октября 2018
  • Используйте взамен 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 
0 голосов
/ 23 октября 2018

Использовать левое соединение и ставить где условие в ON cluase

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 
0 голосов
/ 23 октября 2018

вы можете использовать стороннее программное обеспечение, такое как SQLyog.это очень просто для запроса соединения, просто создайте запрос с пользовательским интерфейсом и назначьте отношение к этим полям между таблицамиВ sqlyog вы можете получить данные из нескольких таблиц, а не только из двух таблиц.потому что в настоящее время я использую это программное обеспечение для экономии времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...