[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сформировать сложный запрос?
Страницы: 1, 2
Dimaz
Приветствую всех. Помогите пожалуйста сформировать 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. Как это реализовать?
Dimaz
Чтобы было понятнее, мне нужно в этот запрос запихать еще:
SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281'

Мне нужно получить все эти данные за один раз и отправить клиенту, чтобы не приходилось делать несколько запросов с клиента.
neadekvat
Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN.

Получить в одной строке (неправильно) или в целом в результате?
Для второго - WHERE user_id IN (id1, id2...)
Dimaz
Цитата (neadekvat @ 20.12.2012 - 18:58)
Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN.

Получить в одной строке (неправильно) или в целом в результате?
Для второго - WHERE user_id IN (id1, id2...)

Ну мне нужно на клиенте получить json-массив с answer_id первого человека, answer_id второго человека и name_test
neadekvat
Цитата (Dimaz @ 20.12.2012 - 23:05)
Ну мне нужно на клиенте получить json-массив с answer_id первого человека, answer_id второго человека и name_test

Данный мною ответ чем-то не устроил?
Dimaz
Не получается ничего. Не совсем понял что вы имели ввиду.
Dimaz
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. Что не так делаю?
rooor
это значит, что поле test_id есть в обеих таблицах
тебе надо явно указать из какой таблицы брать данные, например
SELECT `answers`.`answer_id`, `cabinet`.`test_id`, `answer`.`name_test` ...
Игорь_Vasinsky
`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
блин.... опередил biggrin.gif

_____________
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
Dimaz
Спасибо. Вот теперь работает. 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
Dimaz, да че уж там, можно и так:
SELECT `answers`.`answer_id`, `cabinet`.`name_test`,
(
SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281') as answer_2
FROM...
Invis1ble
Цитата
Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN.
Dimaz
Цитата (Invis1ble @ 20.12.2012 - 20:30)
Цитата
Не советовал бы делать так выборку из >1 таблиц. Почитай про JOIN.

neadekvat
почему?

Вот вот и я о том же) В чем преимущество JOIN-ов?
Invis1ble
вообще-то, я не тестил на сложных запросах, и сам я юзаю join. Но судя по explain'ам простые запросы (тестил 3 таблицы) с where table1.some_id = table2.some_id AND table3.some_id2 = table2.some_id2 являются равнозначными аналогичным join'ам.
Ждем разъяснений от neadekvat smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.