Выбор из левого соединения запроса в MYSQL в nodeJS

0

Я пытаюсь создать объект json со следующей информацией

таблицы

  1. фильмы: первичный ключ MovieID

  2. актеры: первичный ключ ActorID

  3. действовал в: промежуточной таблице для M to N reltionship для фильмов и исполнителей первичного ключа = MovieID и ActorID.

Вот что я пытаюсь сделать.

  1. Выберите актера, где ActorID = 1

Запрос:

SELECT * FROM actors WHERE ActorID=1.
  1. Выберите все фильмы, в которых действовал актер.

Запрос:

SELECT * 
  from movies 
  LEFT 
  JOIN 
    ( SELECT *
       from actedin 
  WHERE ActorID = '+actorID+'
  ) AS actors_temp 
    ON movies.MovieID=actors_temp.MovieID AS movies_actor
  1. найдите среднее значение столбца RTRating.

Запрос: 'SELECT AVG (RTRating) From movies_actor';

  1. найдите среднее значение столбца MTRating.

Запрос: "SELECT AVG (MCRating) From movies_actor ';

Вот мой код nodeJS.

Предположим app = express(), con = соединение с mysql. Я добавляю результаты запросов к переменным субъектам и отправляю их обратно через res.send.

//#4 ActorID-> actor data, movies data, average rating 
app.get('/actor',function(req,res){
    let query_actorID = con.escape(req.query.actorID);
    let selectActor = 'SELECT * from actors WHERE ActorID = '+query_actorID;
        con.query(selectActor, function(err,result){
        if(err) throw err;
    console.log('retrieved actor info');
    console.log(result);
    var actor = result[0];
    var actorID = con.escape(actor.ActorID);
    //Retrieve Actor information
    let movie_query = 'SELECT * from movies LEFT JOIN (SELECT * from actedin WHERE ActorID = '+actorID+') AS actors_temp ON movies.MovieID=actors_temp.MovieID AS movies_actor'; 
    con.query(movie_query, function(err,movies){
    if(err) throw err;
        console.log('retrieved movies info');
        console.log(movies);
        actor.movies = movies;
        let RTR_query = 'SELECT AVG(RTRating) From movies_actor';
        con.query(RTR_query, function(err,average){
        if(err) throw err;
            console.log('retrieved movies info');
            console.log(average);
            actor.averageRTRating = average;
            });
        let MCR_query = 'SELECT AVG(MCRating) From movies_actor';
        con.query(RTR_query, function(err,average){
        if(err) throw err;
            console.log('retrieved movies info');
            console.log(average);
            actor.average_MCRating = average;
            });
        });

    res.send(JSON.stringify(actor));
    });
});

Мой синтаксис, по-видимому, ошибочен. Я думаю, что неправильно использую AS.

  • 0
    movie_actor не существует. Я попытался создать временную таблицу из первого запроса в моем примере, но я не знал, как сохранить эту выбранную таблицу для использования во втором запросе
Теги:
express

2 ответа

0
Лучший ответ

Я не тестировал его, но он должен работать. Movie_query была упрощена. Вы должны учитывать, что данные, возвращаемые RTR_query и MCR_query, представляют собой массив. Я сделал один запрос, он будет более эффективным. В вашем коде вы фактически использовали RTR_query вместо MCR_query. Надеюсь, это поможет.

//#4 ActorID-> actor data, movies data, average rating 
app.get('/actor',function(req,res){
    let query_actorID = con.escape(req.query.actorID);
    let selectActor = 'SELECT * from actors WHERE ActorID = '+query_actorID;
    con.query(selectActor, function(err,result){
        if(err) throw err;

        console.log('retrieved actor info');
        console.log(result);
        if (result.length == 1) {
            let actor = result[0];
            let actorID = con.escape(actor.ActorID);
            //Retrieve Actor information
            let movie_query = 'SELECT * from actedin INNER JOIN movies ON (movies.MovieID = actedin.MovieID) WHERE actedin.ActorID = ' + actorID; 
            con.query(movie_query, function(err,movies){
                if(err) throw err;

                console.log('retrieved movies info');
                console.log(movies);
                actor.movies = movies;

                let MCR_RTR_query = 'SELECT AVG(RTRating) AS rtrating_avg, AVG(MCRating) AS mcrating_avg From movies_actor';
                con.query(MCR_RTR_query, function(err,averages){
                    if(err) throw err;

                    console.log('retrieved movies info');
                    console.log(average);
                    actor.averageRTRating = averages[0].rtrating_avg;
                    actor.average_MCRating = averages[0].mcrating_avg;
                });
            });

            res.send(JSON.stringify(actor));
        }

    });
});
  • 0
    Большое спасибо за помощь
0
SELECT m.title 
  FROM actors a
  JOIN movie_actor ma
    ON ma.actor_id = a.actor_id
  JOIN movies m
    ON m.movie_id = ma.movie_id
 WHERE a.name = 'Denzel'
  • 0
    Большое вам спасибо за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню