Выберите строки из таблицы ответов - PullRequest
0 голосов
/ 19 марта 2019

У меня есть QUESTIONS_TB и ANSWERS_TB

Существует ли один запрос, который вернет все строки из таблицы QUESTIONS И все строки в таблице ANSWERS (для связанной таблицы на основе идентификатора)

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

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

поэтому выдает эту ошибку: операнд должен содержать 1 столбец (столбцы)

Как мне добиться этого за один запрос?

$question_id = 56; //example question id...
$sql = "SELECT Q.*, 

      (SELECT A.answer_body 
      AS body, A.answer_id 
      AS answerid, A.ask_id 
      AS askid, A.user_id 
      AS answered_by_user_id

      FROM $answers_table A 
      INNER JOIN $questions_table Q  
      ON A.ask_id=Q.question_id 

      WHERE A.ask_id='{$question_id}') answers,


      (SELECT COUNT(v.vote_id) FROM $votes_table v WHERE Q.question_id=v.ask_id AND v.vote_type=0 ) votes_down,
      (SELECT COUNT(v.vote_id) FROM $votes_table v WHERE Q.question_id=v.ask_id AND v.vote_type=1) votes_up,
      CONCAT(m.firstname,' ',m.lastname) author_name,m.username u_name FROM $questions_table Q 
      LEFT JOIN $main_table m ON Q.user_id=m.user_id
      WHERE Q.question_id='{$question_id}'";

1 Ответ

0 голосов
/ 19 марта 2019

Если вам нужен только вопрос и ответы на него, вы можете выполнить этот SQL-запрос:

SELECT 
   Q.*, A.answer_body AS body, A.answer_id AS answerid, 
   A.ask_id AS askid, A.user_id AS answered_by_user_id
FROM
   $questions_table Q
LEFT JOIN
   $answers_table A on A.ask_id = Q.question_id
WHERE
   Q.question_id = $question_id

Это вернет все ответы на один вопрос. Вы можете изменить вопрос в утверждении WHERE.

Если вы хотите, чтобы все возвращенные ответы были объединены с их вопросом, удалите оператор WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...