Выберите предметы из 3 разных таблиц - PullRequest
0 голосов
/ 04 июня 2018

Я хотел бы выбрать элементы из 3 разных таблиц, я использую UNION, но количество столбцов отличается, поэтому он возвращает ошибку количества столбцов, есть ли другой способ использовать JOIN, чтобы получить высокую оценкурезультат?

SELECT * 
FROM `ads` JOIN ad_car 
      ON ads.id_ads = ad_car.main_ad 
WHERE ads_cat = :ads_cat AND 
      ads.ad_status = :adStatus 
UNION 
SELECT * 
FROM `ads` JOIN ad_vehpro 
      ON ads.id_ads = ad_vehpro.main_ad 
WHERE ads_cat = :ads_cat AND 
      ads.ad_status = :adStatus 
ORDER BY date_renewed 
DESC LIMIT 4

ИЗД.поля:

$sqlAds = "SELECT * FROM `ads`"
                . " LEFT JOIN ad_car ON ads.id_ads = ad_car.main_ad"
                . " LEFT JOIN ad_vehpro ON ads.id_ads = ad_vehpro.main_ad"
                . " WHERE ads_cat = :ads_cat AND ads.ad_status = :adStatus ORDER BY date_renewed DESC";

Заранее спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Список столбцов, которые вы явно хотите.Укажите NULL значения для остальных:

SELECT a.*, c.col1, c.col2
FROM `ads` a JOIN
      ad_car c
      ON a.id_ads = c.main_ad 
WHERE ads_cat = :ads_cat AND 
      a.ad_status = :adStatus 
UNION 
SELECT a.*, v.col1, NULL as col2
FROM ads a JOIN
     ad_vehpro v
     ON a.id_ads = v.main_ad 
WHERE ads_cat = :ads_cat AND 
      a.ad_status = :adStatus 
ORDER BY date_renewed DESC
LIMIT 4;

Примечание. Если вы знаете, что между двумя подзапросами нет дубликатов, используйте UNION ALL вместо UNION.UNION - накладные расходы на удаление дубликатов.

...