2012-03-12 3 views
0

У меня возникли проблемы, пытаясь получить запрос, как этоткак выполнить этот запрос

стол ответы

CREATE TABLE IF NOT EXISTS `rws_answers` (
    `id_answer` int(11) NOT NULL AUTO_INCREMENT, 
    `id_question` int(11) DEFAULT NULL, 
    `row_subject` varchar(255) NOT NULL, 
    `column_subject` varchar(255) DEFAULT NULL, 
    `answer_type` varchar(1) DEFAULT NULL, 
    `score` int(5) DEFAULT '0', 
    PRIMARY KEY (`id_answer`), 
    KEY `IDX_51C8C33DE62CA5DB` (`id_question`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=765 ; 

отзывов табличных

CREATE TABLE IF NOT EXISTS `rws_reviews` (
    `id_review` int(11) unsigned NOT NULL, 
    `id_client` varchar(36) NOT NULL DEFAULT '', 
    `id_item` int(11) unsigned NOT NULL DEFAULT '0', 
    `id_question` int(11) unsigned NOT NULL DEFAULT '0', 
    `id_location` int(11) unsigned NOT NULL DEFAULT '0', 
    `id_answer` int(11) unsigned NOT NULL DEFAULT '0', 
    `value` text, 
    `date_answered` datetime NOT NULL, 
    PRIMARY KEY (`id_review`,`id_client`,`id_item`,`id_question`,`id_location`,`id_answer`), 
    KEY `IDX_6868EE34943B391C` (`id_item`), 
    KEY `IDX_6868EE34E62CA5DB` (`id_question`), 
    KEY `IDX_6868EE34E45655E` (`id_location`), 
    KEY `IDX_6868EE34FCEAFFC8` (`id_answer`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

, что мне нужно, чтобы получить все id_answer в табличных ответах, которые есть и не указаны в обзорах таблицы , поэтому, если я попробую этот sql

SELECT r.id_review, a.id_answer AS aa, r.id_answer AS ra, a.row_subject, r.id_location 
FROM rws_answers a 
LEFT JOIN rws_reviews r USING(id_answer) 
ORDER BY a.id_answer DESC 

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

SELECT r.id_review, a.id_answer AS aa, r.id_answer AS ra, a.row_subject, r.id_location 
FROM rws_answers a 
LEFT JOIN rws_reviews r USING(id_answer) 
WHERE r.id_location = 1 
ORDER BY a.id_answer DESC 

, но тогда все мои ответы, которые не в обзорах таблице донских 't показать больше, я попробовал любую комбинацию без результата, может ли кто-нибудь быть таким добрым, чтобы попытаться помочь мне или, может быть, предложить мне другой способ сделать запрос, у меня есть более 3-х дней, пытаясь, готовясь, делаю пример , не знаю, что еще делать, спасибо!

+0

Какого черта вы используете MyISAM и Latin1?! ? –

ответ

1

Вы можете преобразовать пункт USING к ON пункта, и объединить пункт WHERE в него:

LEFT JOIN rws_reviews r ON r.id_answer = a.id_answer AND r.id_location = 1 
+0

Большое спасибо за ответ, я не могу поверить, что использование было проблемой, теперь о том, хочу ли я получить некоторые фиксы из другой таблицы, например, мне нужно получить в результате имя элемента, как присоединиться к элементу таблица с этим запросом ??? спасибо за любую помощь !!! – goseta

+1

'ИСПОЛЬЗОВАНИЕ' не было проблемой; проблема заключалась в предложении 'WHERE', которое необходимо было объединить в предложение' ON'. Для этого 'USING' необходимо было преобразовать в предложение' ON' для объединения 'WHERE'. – ruakh

+1

Что касается присоединения к другой таблице - вы можете просто добавить еще один 'JOIN' до конца после предложения' ON', но перед предложением 'WHERE'. – ruakh

1

Попробуйте следующее

SELECT r.id_review, a.id_answer AS aa, r.id_answer AS ra, a.row_subject, r.id_location 
FROM rws_answers a 
LEFT JOIN rws_reviews r 
on r.id_answer = a.id_answer 
and r.id_location = 1 
ORDER BY a.id_answer DESC 
Смежные вопросы