Manchester City secured a 2-1 victory over Real Madrid at the Bernabeu on Wednesday night to go fourth in the Uefa Champions League table.
Madrid took the lead through Rodrygo, but were pegged back after Thibaut Courtois spilt a header into the path of Nico O’Reilly to finish. Antonio Rudiger then made a poor challenge on Erling Haaland, who converted from the penalty spot to seal victory.
Speaking after scoring his first Champions League goal, O’Reilly said: “It’s very special. But the most important thing is the three points. I’m taking everything in my stride, I’m taking every game as it comes.”
The win is also the fourth in a row across all competitions for City, who trail Premier League leaders Arsenal by two points.
“We know how good Real Madrid are. Playing against them here and winning, it shows how good we are at the minute, and the form that we’re in,” O’Reilly added.
It was a second home defeat in a row for Madrid following the weekend's 2-0 setback to Celta Vigo in La Liga. Xabi Alonso's side have won only two of their past eight matches across competitions.
On Real's dip in form, defender Raul Asencio said: “We’re under scrutiny every match, as always, at Real Madrid. The dressing room is 100 per cent behind Xabi; we understand his message. The players need to change their attitude, and today we saw that change.”
“We did many things well and I think we deserved more, but the one who scores the most goals wins.”
Real Madrid player ratings
Thibaut Courtois - 4/10: Palmed Josko Gvardiol’s header out carelessly to hand Nico O’Reilly a tap-in. A rare unconvincing display from the Real Madrid goalkeeper.
Alvaro Carreras - 8/10: The brightest of Real Madrid’s makeshift defence. Carreras won the ball back for the opener, always made the right decision when going forward, and defended well until the introduction of Savinho.
Antonio Rudiger - 3/10: A needless challenge on Haaland saw the German give away a needless penalty. Almost got sent off for a heavy tackle on Savinho.
Raul Asencio - 4/10: Got involved in petty skirmishes with Haaland and struggled when isolated against Jeremy Doku. Punched the dugout when substituted in the 79th minute.
Federico Valverde - 5/10: Had no answer for Doku, whether he closed him down or stood off. Fared better when going forwards.
Aurelien Tchouameni - 6/10: Moved the ball on quickly to Real Madrid’s more creative outlets. Had a header that glanced narrowly wide. Not involved as much as normal with many of City’s attacks going down the flanks.
Dani Ceballos - 6/10: Broke up play and kept things simple. Replaced in the 67th minute by Brahim Diaz.
Jude Bellingham - 6/10: Involved in Real Madrid’s first goal when playing the ball out to Rodrygo, but made a mess of his next big chance trying to chip the goalkeeper.
Vinicius Jr - 6/10: Made a bright start and then fizzled out. Unlucky not to win a penalty in the first half after the challenge was just on the edge of the area.
Gonzalo Garcia - 4/10: Isolated. Positioned well when Bellingham had possession in the second half but wasn’t found. Replaced by Guler.
Rodrygo - 8/10: A precise finish into the far corner put Real Madrid ahead in a first half in which he was the best player on the pitch. Almost had an assist with an exquisite pass to Vinicius.
Substitutes
Arda Guler (Garcia, 58’) - 6/10: Switched the play quickly with impressive balls to Real Madrid’s wingers. Began several promising attacks.
Brahim Diaz (Ceballos, 67’) - 6/10: Helped out defensively against Jeremy Doku as soon as he was introduced. Got crosses in when the opportunity arose, but they weren’t accurate enough.
Endrick (Asencio, 79’) - N/R: The forward thought he had equalised with a header that cannoned back off the crossbar.

Manchester City player ratings
Gianluigi Donnarumma - 6/10: Couldn’t do much for Rordygo's goal. Closed the angle down perfectly against Vinicius Jr to deny Real a second. Not a lot to do in the second half.
Nico O’Reilly - 6/10: Struggled at times against Rodrygo but made a key intervention to stop him getting the ball in the second half. Better going forward, and scored from close range after an error from Courtois.
Josko Gvardiol - 7/10: Played a key role in the equaliser with a header that was palmed towards O’Reilly. Positioned well during wide Real Madrid counterattacks. Headed out crosses in the final minutes.
Ruben Dias - 6/10: Dealt with the threats that came towards him, but could have been better when transitioning the ball forwards.
Matheus Nunes - 6/10: Made a shaky start when almost conceding a penalty with a foul on Vinicius. Improved as the game went on, and often began moves for his side.
Nico Gonzalez - 7/10: The orchestrator of play for Manchester City. Always positioned intelligently to allow his attackers to reset.
Jeremy Doku - 7/10: A constant threat on the left flank, where he turned defenders inside out, got shots off at goal, and opened up space for City attackers by drawing two defenders onto him.
Phil Foden - 5/10: Pressed well and worked hard during transition, but the majority of City’s best attacks came from the flanks.
Rayan Cherki - 7/10: Positive in possession while bringing out some skills from his expansive trick book. Almost found Haaland with a gentle chip over the defence in the second half.
Bernardo Silva - 5/10: Impressed when drifting into central areas, but gave away the ball too cheaply for Real Madrid’s opener. Booked and now suspended for the next game after a reckless challenge.
Erling Haaland - 7/10: Won the penalty for City and sent Courtois the wrong way. Held the ball up well in crowded spaces, timed his runs well behind the Real defence.
Substitutes
Omar Marmoush (Haaland, 70’) - N/R: Kept Real Madrid’s defenders occupied.
Tijjani Reijnders (Foden, 70’) - N/R: Kept the ball well under pressure.
Savinho (Cherki, 70’) - N/R: Stretched the play down the right flank and almost got Rudiger sent off after beating him to the ball.
Nathan Ake (Doku, 87’) - N/R: Introduced as City looked to hold out for the final minutes.
