Index: includes/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.inc,v
retrieving revision 1.85
diff -u -r1.85 database.inc
--- includes/database.inc	30 Nov 2007 12:19:10 -0000	1.85
+++ includes/database.inc	16 Dec 2007 15:46:04 -0000
@@ -290,30 +290,30 @@
       $new = "WHERE $where ";
     }
     $new = " $join $new";
-    if (strpos($query, 'WHERE')) {
-      $query = str_replace('WHERE', $new .'AND (', $query);
+    if ($pos = strrpos($query, 'WHERE')) {
+      $query = substr($query, 0, $pos) . $new .'AND ('. substr($query, $pos + 5);
       $insert = ') ';
     }
     else {
       $insert = $new;
     }
-    if (strpos($query, 'GROUP')) {
+    if ($pos = strpos($query, 'GROUP', $pos)) {
       $replace = 'GROUP';
     }
-    elseif (strpos($query, 'HAVING')) {
+    elseif ($pos = strpos($query, 'HAVING', $pos)) {
       $replace = 'HAVING';
     }
-    elseif (strpos($query, 'ORDER')) {
+    elseif ($pos = strpos($query, 'ORDER', $pos)) {
       $replace = 'ORDER';
     }
-    elseif (strpos($query, 'LIMIT')) {
+    elseif ($pos = strpos($query, 'LIMIT', $pos)) {
       $replace = 'LIMIT';
     }
     else {
       $query .= $insert;
     }
     if (isset($replace)) {
-      $query = str_replace($replace, $insert . $replace, $query);
+      $query = substr($query, 0, $pos) . str_replace($replace, $insert . $replace, substr($query, $pos));
     }
   }
 
