Приветствую всех. Помогите пожалуйста сформировать
sql-запрос:
SELECT answers.answer_id, answers.test_id, cabinet.name_test FROM `answers`, `cabinet` WHERE `user_id` = '184918649' AND `friend_id` = '353281' AND answers.test_id = cabinet.test_id
Помимо получения данных из 2-х таблиц мне нужно получить еще один asnwer_id где user_id = 353281. Как это реализовать?
Чтобы было понятнее, мне нужно в этот запрос запихать еще:
SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281'
Мне нужно получить все эти данные за один раз и отправить клиенту, чтобы не приходилось делать несколько запросов с клиента.
neadekvat
20.12.2012 - 22:58
Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN.
Получить в одной строке (неправильно) или в целом в результате?
Для второго - WHERE user_id IN (id1, id2...)
Цитата (neadekvat @ 20.12.2012 - 18:58) |
Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN.
Получить в одной строке (неправильно) или в целом в результате? Для второго - WHERE user_id IN (id1, id2...) |
Ну мне нужно на клиенте получить json-массив с answer_id первого человека, answer_id второго человека и name_test
neadekvat
20.12.2012 - 23:06
Цитата (Dimaz @ 20.12.2012 - 23:05) |
Ну мне нужно на клиенте получить json-массив с answer_id первого человека, answer_id второго человека и name_test |
Данный мною ответ чем-то не устроил?
Не получается ничего. Не совсем понял что вы имели ввиду.
SELECT `answer_id`,`name_test` FROM `answers` INNER JOIN `cabinet` WHERE `user_id` = '184918649' AND `friend_id` = '353281' AND answers.test_id = cabinet.test_id
Этот запрос работает. А этот нет:
SELECT `answer_id`,`test_id`, `name_test` FROM `answers` INNER JOIN `cabinet` WHERE `user_id` = '184918649' AND `friend_id` = '353281' AND answers.test_id = cabinet.test_id
Дает ошибку #1052 - Column 'test_id' in field list is ambiguous. Что не так делаю?
это значит, что поле test_id есть в обеих таблицах
тебе надо явно указать из какой таблицы брать данные, например
SELECT `answers`.`answer_id`, `cabinet`.`test_id`, `answer`.`name_test` ...
Игорь_Vasinsky
21.12.2012 - 00:00
`test_id` в обоих таблицах?
в SELECT так же укажи с именами таблиц
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
21.12.2012 - 00:02
блин.... опередил
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Спасибо. Вот теперь работает. test_id мне не нужен на клиенте, поэтому я его убрал. Просто я думал его нужно выбирать, чтобы сработало это условие answers.test_id = cabinet.test_id. Вот что получилось:
SELECT `answers`.`answer_id`, `cabinet`.`name_test` FROM `answers` INNER JOIN `cabinet` WHERE `user_id` = '184918649' AND `friend_id` = '353281' AND answers.test_id = cabinet.test_id
Только на счет второго запроса я не понял. Как его в этот запихать? Второй запрос:
SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281'
neadekvat
21.12.2012 - 00:16
Dimaz, да че уж там, можно и так:
SELECT `answers`.`answer_id`, `cabinet`.`name_test`,
(SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281') as answer_2
FROM...
Цитата (Invis1ble @ 20.12.2012 - 20:30) |
Цитата | Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN. |
neadekvat почему?
|
Вот вот и я о том же) В чем преимущество JOIN-ов?
Invis1ble
21.12.2012 - 00:43
вообще-то, я не тестил на сложных запросах, и сам я юзаю join. Но судя по explain'ам простые запросы (тестил 3 таблицы) с where table1.some_id = table2.some_id AND table3.some_id2 = table2.some_id2 являются равнозначными аналогичным join'ам.
Ждем разъяснений от neadekvat
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль