| | 120 | } |
| | 121 | elseif (preg_match($select_distinct_pattern, $query, $matches)) |
| | 122 | { |
| | 123 | $select_fields_string=''; |
| | 124 | $distinct_fields_string=''; |
| | 125 | $orderby_fields_string=''; |
| | 126 | |
| | 127 | foreach (preg_split( '/\s*,\s*/', $matches[1]) as $field) |
| | 128 | { |
| | 129 | $split_field = preg_split( '/\s*AS\s*/i', $field); |
| | 130 | if (isset($split_field[1])) |
| | 131 | { |
| | 132 | $distinct_fields[ $split_field[1] ] = $field; |
| | 133 | } |
| | 134 | else |
| | 135 | { |
| | 136 | $distinct_fields[ $field ] = $field; |
| | 137 | } |
| | 138 | } |
| | 139 | |
| | 140 | foreach (preg_split( '/\s*,\s*/', $matches[3]) as $field) |
| | 141 | { |
| | 142 | $kv = preg_split( '/\s+/', $field ); |
| | 143 | $orderby_fields[ $kv[0] ] = $kv[1]; |
| | 144 | } |
| | 145 | |
| | 146 | foreach ($distinct_fields as $as_field => $field) |
| | 147 | { |
| | 148 | if ($distinct_fields_string) |
| | 149 | { |
| | 150 | $distinct_fields_string=$distinct_fields_string.', '; |
| | 151 | } |
| | 152 | |
| | 153 | $distinct_fields_string=$distinct_fields_string.$as_field; |
| | 154 | |
| | 155 | if ($select_fields_string) |
| | 156 | { |
| | 157 | $select_fields_string=$select_fields_string.', '; |
| | 158 | } |
| | 159 | |
| | 160 | $select_fields_string=$select_fields_string.$field; |
| | 161 | |
| | 162 | if ($orderby_fields_string) |
| | 163 | { |
| | 164 | $orderby_fields_string=$orderby_fields_string.', '; |
| | 165 | } |
| | 166 | |
| | 167 | $orderby_fields_string=$orderby_fields_string.$as_field.' '; |
| | 168 | |
| | 169 | if (isset($orderby_fields[$as_field])) |
| | 170 | { |
| | 171 | $orderby_fields_string=$orderby_fields_string.$orderby_fields[$as_field]; |
| | 172 | unset($orderby_fields[$as_field]); |
| | 173 | } |
| | 174 | else |
| | 175 | { |
| | 176 | $orderby_fields_string=$orderby_fields_string.'ASC'; |
| | 177 | } |
| | 178 | } |
| | 179 | |
| | 180 | foreach ($orderby_fields as $field => $order) |
| | 181 | { |
| | 182 | $orderby_fields_string=$orderby_fields_string.', '.$field.' '.$order; |
| | 183 | } |
| | 184 | |
| | 185 | $query = ' |
| | 186 | SELECT DISTINCT ON ('.$distinct_fields_string.') '.$select_fields_string.' |
| | 187 | '.$matches[2].' |
| | 188 | ORDER BY '.$orderby_fields_string; |
| | 189 | ($result = pg_query($query)) or die($query."\n<br>".pg_last_error()); |