Index: src/wp-includes/class-wp-query.php
===================================================================
--- src/wp-includes/class-wp-query.php	(revision 45040)
+++ src/wp-includes/class-wp-query.php	(working copy)
@@ -1571,8 +1571,20 @@
 		$primary_meta_key   = '';
 		$primary_meta_query = false;
 		$meta_clauses       = $this->meta_query->get_clauses();
+
 		if ( ! empty( $meta_clauses ) ) {
-			$primary_meta_query = reset( $meta_clauses );
+			$primary_meta_query = false;
+
+			foreach ( $meta_clauses as $meta_clause ) {
+				if ( $meta_clause['key'] == $orderby ) {
+					$primary_meta_query = $meta_clause;
+					break;
+				}
+			}
+
+			if ( ! $primary_meta_query ) {
+				$primary_meta_query = reset( $meta_clauses );
+			}
 
 			if ( ! empty( $primary_meta_query['key'] ) ) {
 				$primary_meta_key = $primary_meta_query['key'];
Index: tests/phpunit/tests/query/metaQuery.php
===================================================================
--- tests/phpunit/tests/query/metaQuery.php	(revision 45040)
+++ tests/phpunit/tests/query/metaQuery.php	(working copy)
@@ -1783,6 +1783,69 @@
 	}
 
 	/**
+	 * Test ordering by multiple meta keys.
+	 *
+	 * @ticket 38442
+	 */
+	function test_orderby_clause_two_meta_keys() {
+		$posts = self::factory()->post->create_many( 4 );
+
+		add_post_meta( $posts[0], 'foo', 'jjj' );
+		add_post_meta( $posts[1], 'foo', 'zzz' );
+		add_post_meta( $posts[2], 'foo', 'aaa' );
+		add_post_meta( $posts[3], 'foo', 'aaa' );
+
+		add_post_meta( $posts[3], 'bar', 150 );
+		add_post_meta( $posts[2], 'bar', 100 );
+		add_post_meta( $posts[1], 'bar', 200 );
+		add_post_meta( $posts[0], 'bar', 300 );
+
+		$query_args = array(
+			'fields'     => 'ids',
+			'post_type'  => 'any',
+			'meta_query' => array(
+				'relation' => 'AND',
+				array(
+					'key' => 'foo',
+				),
+				array(
+					'key'  => 'bar',
+					'type' => 'UNSIGNED',
+				),
+			),
+			'orderby'    => array(
+				'foo' => 'ASC',
+				'bar' => 'ASC',
+			),
+		);
+
+		$query = new WP_Query( $query_args );
+
+		$this->assertEquals( array( $posts[2], $posts[3], $posts[0], $posts[1] ), $query->posts );
+		$this->assertEquals( 2, substr_count( $query->request, 'ASC' ) );
+		$this->assertEquals( 1, substr_count( $query->request, 'CAST(' ) );
+
+		$query_args['orderby'] = array(
+			'foo' => 'ASC',
+			'bar' => 'DESC',
+		);
+		$query                 = new WP_Query( $query_args );
+
+		$this->assertEquals( array( $posts[3], $posts[2], $posts[0], $posts[1] ), $query->posts );
+		$this->assertEquals( 1, substr_count( $query->request, 'ASC' ) );
+		$this->assertEquals( 1, substr_count( $query->request, 'DESC' ) );
+
+		$query_args['orderby'] = array(
+			'foo' => 'DESC',
+			'bar' => 'DESC',
+		);
+		$query                 = new WP_Query( $query_args );
+
+		$this->assertEquals( array( $posts[1], $posts[0], $posts[3], $posts[2] ), $query->posts );
+		$this->assertEquals( 2, substr_count( $query->request, 'DESC' ) );
+	}
+
+	/**
 	 * @ticket 31045
 	 */
 	public function test_orderby_more_than_one_clause_key() {
