Index: includes/database/select.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/select.inc,v
retrieving revision 1.2
diff -u -p -r1.2 select.inc
--- includes/database/select.inc	22 Aug 2008 12:46:25 -0000	1.2
+++ includes/database/select.inc	31 Aug 2008 15:23:27 -0000
@@ -670,9 +670,11 @@ class SelectQuery extends Query implemen
     // ORDER BY
     if ($this->order) {
       $query .= "\nORDER BY ";
+      $fields = array();
       foreach ($this->order as $field => $direction) {
-        $query .= $field . ' ' . $direction . ' ';
+        $fields[] = $field . ' ' . $direction;
       }
+      $query .= implode(', ', $fields);
     }
 
     // RANGE is database specific, so we can't do it here.
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.1
diff -u -p -r1.1 database_test.test
--- modules/simpletest/tests/database_test.test	31 Aug 2008 11:43:41 -0000	1.1
+++ modules/simpletest/tests/database_test.test	31 Aug 2008 15:23:28 -0000
@@ -1001,6 +1001,43 @@ class DatabaseSelectOrderedTestCase exte
   }
 
   /**
+   * Test multiple order by.
+   */
+  function testSimpleSelectMultiOrdered() {
+    try {
+      $query = db_select('test');
+      $name_field = $query->addField('test', 'name');
+      $age_field = $query->addField('test', 'age', 'age');
+      $job_field = $query->addField('test', 'job');
+      $query->orderBy($job_field);
+      $query->orderBy($age_field);
+      $result = $query->execute();
+      
+      $num_records = 0;
+      $expected = array(
+        array('Ringo', 28, 'Drummer'),
+        array('John', 25, 'Singer'),
+        array('George', 27, 'Singer'),
+        array('Paul', 26, 'Songwriter'),
+      );
+      $results = $result->fetchAll(PDO::FETCH_NUM);
+      foreach ($expected as $k => $record) {
+        $num_records++;
+        foreach ($record as $kk => $col) {
+          if ($expected[$k][$kk] != $results[$k][$kk]) {
+            $this->assertTrue(FALSE, t('Results returned in correct order.'));
+          }
+        }
+      }
+      $this->assertEqual($num_records, 4, t('Returned the correct number of rows.'));
+    }
+    catch(Exception $e) {
+      $this->assertTrue(FALSE, $e->getMessage());
+    }
+  }
+
+
+  /**
    * Test order by descending.
    */
   function testSimpleSelectOrderedDesc() {
