Я пытаюсь создать объект json со следующей информацией
таблицы
фильмы: первичный ключ MovieID
актеры: первичный ключ ActorID
действовал в: промежуточной таблице для M to N reltionship для фильмов и исполнителей первичного ключа = MovieID и ActorID.
Вот что я пытаюсь сделать.
Запрос:
SELECT * FROM actors WHERE ActorID=1.
Запрос:
SELECT *
from movies
LEFT
JOIN
( SELECT *
from actedin
WHERE ActorID = '+actorID+'
) AS actors_temp
ON movies.MovieID=actors_temp.MovieID AS movies_actor
Запрос: 'SELECT AVG (RTRating) From movies_actor';
Запрос: "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.
Я не тестировал его, но он должен работать. 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));
}
});
});
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'