@av_tyschenko

Как сделать запрос с мульти-JOIN?

Уважаемые знатоки баз данных, подскажите пожалуйста.

У меня есть 2 таблицы "Объявления" и "Дополнительные поля". Мне нужно сделать запрос что бы в фильтре поиска указывали множество значений, и выводило только те, что указаны.

У меня получается, что я ввожу несколько JOIN в запрос, а он мне выдает вот такую ошибку :

Error Number: 1066

Not unique table/alias: 't2'

SELECT
  `t1`.`ID`          AS `ID`,
  `t1`.`price`       AS `price`,
  `t1`.`title`       AS `title`,
  `t1`.`category_id` AS `category_id`,
  `t1`.`date`        AS `date`,
  `t1`.`type`        AS `type`,
  `t1`.`country_id`  AS `country_id`
FROM `ozago_ads` `t1` INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` = 44
  INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` = 370
  INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` = 51
  INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` = 46
  INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` = 49
  INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` = 50
WHERE `type` = '1' AND `region_id` = '4891' AND `category_id` IN ('198') AND `price` > '40000' AND `price` < '200000';

Filename: models/Loop.php

Line Number: 176
  • Вопрос задан
  • 155 просмотров
Пригласить эксперта
Ответы на вопрос 2
AloneCoder
@AloneCoder
[object Object]
Зачем столько JOIN если можно в WHERE написать AND t2. meta_key IN () ?
Ответ написан
@Cage
SELECT DISTINCT
  `t1`.`ID`          AS `ID`,
  `t1`.`price`       AS `price`,
  `t1`.`title`       AS `title`,
  `t1`.`category_id` AS `category_id`,
  `t1`.`date`        AS `date`,
  `t1`.`type`        AS `type`,
  `t1`.`country_id`  AS `country_id`
FROM `ozago_ads` `t1` 
  INNER JOIN `ozago_ads_meta` `t2` ON `t2`.`id_ad` = `t1`.`ID` AND `t2`.`meta_key` IN (44, 370, 51, 46, 49, 50)
WHERE `type` = '1' AND `region_id` = '4891' AND `category_id` IN ('198') AND `price` > '40000' AND `price` < '200000';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы