@krekerov
Fullstack ninja

Как делать в запросе подзапрос?

Необходимо функционально сделать также\
function getTests($id) {
    $sql = "SELECT * FROM tests WHERE guid='$id'";
    try {
        //Подзапрос
        $sql = "SELECT * FROM questions WHERE testid='$id'";
        try {
            $db = getConnection();
            $stmt = $db->prepare($sql);
            $stmt->execute();
            $tests = $stmt->fetchAll(PDO::FETCH_OBJ);
            $db = null;
            $questions = $tests;
        } catch(PDOException $e) {
            echo '{"text":'. $e->getMessage() .'}';
        }

        $db = getConnection();
        $stmt = $db->prepare($sql);
        $stmt->execute();
        $tests = $stmt->fetchObject();
        $tests->questions = $questions;
        $db = null;
        
        echo fix_json(json_encode($tests));
    } catch(PDOException $e) {
        echo '{"text":'. $e->getMessage() .'}';
    }
}


Из этого кода я получаю на выходе
{"id":"1","name":"первый вопрос","description":"Описание для первого вопроса","testid":"123123","question_type":"one","questions":[{"id":"1","name":"первый вопрос","description":"Описание для первого вопроса","testid":"123123","question_type":"one"},{"id":"2","name":"Второй вопрос","description":"Описание второго вопроса","testid":"123123","question_type":"one"}]}
  • Вопрос задан
  • 2445 просмотров
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вы не можете получить такую структуру данных из mysql.
Если функция getTests не вызывается в цикле - 2 запроса абсолютно нормально.

Хотя код у вас какой то странный написан, значение $sql перезаписывается на 5й строчке и Вы в итоге шлете один и тот же запрос дважды.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А в чем вопрос собственно? INNER/LEFT JOIN?
Ответ написан
@carryx
MySQL Developer
странный код, подзапрос уйма способов сделать
например так:
SELECT `tmp`.`name` FROM (SELECT name, .... FROM tabl WHERE ....) as tmp

но в вашем случае JOIN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы