Mysql Как не делать выборку из таблицы дважды?

Dimaz

Новичок
Привет всем. Подскажите, пожалуйста, как можно избежать в моем запросе двойную выборку.
PHP:
SELECT `cabinet`.`name_test`, `answers`.`answer_id`, (
SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281' AND `answers`.`test_id` = `cabinet`.`test_id`
) as answer_2 FROM `cabinet` INNER JOIN `answers`
 WHERE `user_id` = '184918649' AND `friend_id` = '353281' AND `answers`.`test_id` = `cabinet`.`test_id`
Мне нужно выполнить этот запрос `answers`.`test_id` = `cabinet`.`test_id` только один раз и применить к обоим пользователям. Как это можно сделать?
 

Фанат

oncle terrible
Команда форума
Или у меня дежа вю, или я уже этот вопрос видел
 

WMix

герр M:)ller
Партнер клуба
ты проще напиши, что есть, какая задача... сложно догадываться
 

Фанат

oncle terrible
Команда форума
ты проще напиши, что есть, какая задача... сложно догадываться
На sql.ru чувак расстарался, а мы, видать, рылом не вышли.
Приветствую всех. Задача такая. Нужно получить из базы идентификаторы ответов и названия тестов, где id пользователя 123456 и id человека которому он отправил тест 654321. Так как второй человек может еще не пройти один из тестов, отправленных ему, значит в таблице могут не существовать строки с определенным id теста. Не существующие строки мне нужно записать в результирующую таблицу, например как ноль. Вот сам запрос:
 

Dimaz

Новичок
точняк, вот же ж он
http://stackoverflow.com/questions/14005983/how-to-write-a-sql-request-in-less-code
какой же он другой когда тот же самый.
Ну так не на этом форуме же) Сам запрос рабочий. Только я хочу узнать возможно ли его сократить, чтобы не выполнять 2 раза одно и то же действие.
 

WMix

герр M:)ller
Партнер клуба
Dimaz
эт тип, сейчас я вам зачетку устрою? или искал вопрос поумнее? (скажу сразу там совсем просто)...
 

Dimaz

Новичок
PHP:
SELECT `cabinet`.`name_test`, `answers`.`answer_id`
 FROM `cabinet` INNER JOIN `answers` ON `answers`.`test_id` = `cabinet`.`test_id`
 WHERE `user_id` = '184918649' AND `friend_id` = '353281' OR `user_id` = '353281'
Выводит:

Уже лучше, но мне нужно 3 столбца.
 

WMix

герр M:)ller
Партнер клуба
глупые задачи!... ты хочешь 2 раза заджойниться но один раз условие джоина написать!
но самая большая проблема, я не понимаю что ты хочешь добиться.. я не знаю где какие поля находятся... у меня нет запросов типа create table и данных, чтоб можно было потестить!
 

Фанат

oncle terrible
Команда форума
Я не очень вникал, но если бы сам делал, то сначала получил бы айдишники в массив, а потом по ним опрашивал бы вопросы и того и другого.
Но я могу неправильно понять вопрос

Хотя да, "могут не существовать" намекают на LEFT JOIN
 

Dimaz

Новичок
Вот таблица answers:

Вот таблица cabinet:

Нужно получить названия тестов, id-ы ответов для первого и второго пользователя. Примерно так:

Здесь второй пользователь еще не прошел первый тест, поэтому записывается NULL. Запрос в моем первом сообщении как раз выдает такую результирующую таблицу.
 

Dimaz

Новичок
Таблица answers:
PHP:
CREATE TABLE `answers` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `user_id` int(11) NOT NULL COMMENT 'ID пользователя ВК',
 `answer_id` text NOT NULL COMMENT 'Номер ответа',
 `test_id` int(3) NOT NULL COMMENT 'id теста',
 `friend_id` int(11) NOT NULL COMMENT 'id друга',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='Результаты опроса'
Таблица cabinet:
PHP:
CREATE TABLE `cabinet` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `test_id` int(11) NOT NULL,
 `name_id` int(11) NOT NULL,
 `name_test` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
 
Сверху