diff --git a/src/Builder/Syntax/ColumnWriter.php b/src/Builder/Syntax/ColumnWriter.php index 999db08..8bd4ddc 100644 --- a/src/Builder/Syntax/ColumnWriter.php +++ b/src/Builder/Syntax/ColumnWriter.php @@ -151,11 +151,15 @@ public function writeColumnWithAlias(Column $column) */ public function writeColumn(Column $column) { - $alias = $column->getTable()->getAlias(); - $table = ($alias) ? $this->writer->writeTableAlias($alias) : $this->writer->writeTable($column->getTable()); - - $columnString = (empty($table)) ? '' : "{$table}."; - $columnString .= $this->writer->writeColumnName($column); + if ( $column->getDisableTablePrependInGroup() === false ) { + $alias = $column->getTable()->getAlias(); + $table = ($alias) ? $this->writer->writeTableAlias($alias) : $this->writer->writeTable($column->getTable()); + + $columnString = (empty($table)) ? '' : "{$table}."; + $columnString .= $this->writer->writeColumnName($column); + } else { + $columnString = $this->writer->writeColumnName($column); + } return $columnString; } diff --git a/src/Builder/Syntax/SelectWriter.php b/src/Builder/Syntax/SelectWriter.php index b124bfe..37fe362 100644 --- a/src/Builder/Syntax/SelectWriter.php +++ b/src/Builder/Syntax/SelectWriter.php @@ -238,20 +238,25 @@ function (&$where) use (&$whereWriter) { /** * @param Select $select - * @param array $parts + * @param array $parts * * @return $this */ public function writeSelectGroupBy(Select $select, array &$parts) { - $groupBy = $this->writeSelectAggrupation( - $select, - $this->columnWriter, - 'getGroupBy', - 'writeColumn', - ', ', - 'GROUP BY ' - ); + $groupBy = ''; + $columns = $select->getGroupBy(); + $columnWriter = $this->columnWriter; + if ( !empty($columns) ) { + \array_walk( + $columns, + function (&$column) use ($select, $columnWriter) { + $column->setDisableTablePrependInGroup($select->getDisableTablePrepend()); + $column = $columnWriter->writeColumn($column); + } + ); + $groupBy = 'GROUP BY' . implode(',', $columns); + } $parts = \array_merge($parts, [$groupBy]); diff --git a/src/Manipulation/Select.php b/src/Manipulation/Select.php index 1580df4..8be81d3 100644 --- a/src/Manipulation/Select.php +++ b/src/Manipulation/Select.php @@ -70,6 +70,11 @@ class Select extends AbstractBaseQuery */ protected $parentQuery; + /** + * @var bool + */ + protected bool $disableTablePrepend=false; + /** * @param string $table * @param array $columns @@ -531,16 +536,34 @@ public function setParentQuery(Select $parentQuery) /** * @param string $column * @param string $direction - * @param null $table + * @param null $table * * @return $this */ public function orderBy($column, $direction = OrderBy::ASC, $table = null) { $current = parent::orderBy($column, $direction, $table); - if ($this->getParentQuery() != null) { + if ( $this->getParentQuery() != null ) { $this->getParentQuery()->orderBy($column, $direction, \is_null($table) ? $this->getTable() : $table); } return $current; } + + /** + * @param bool $disableTablePrepend + * @return $this + */ + public function setDisableTablePrepend(bool $disableTablePrepend = false) + { + $this->disableTablePrepend = $disableTablePrepend; + return $this; + } + + /** + * @return bool + */ + public function getDisableTablePrepend() + { + return $this->disableTablePrepend; + } } diff --git a/src/Syntax/Column.php b/src/Syntax/Column.php index aa244f9..96cf814 100644 --- a/src/Syntax/Column.php +++ b/src/Syntax/Column.php @@ -34,6 +34,11 @@ class Column implements QueryPartInterface */ protected $alias; + /** + * @var bool + */ + protected bool $disableTablePrependInGroup = false; + /** * @param string $name * @param string $table @@ -136,4 +141,21 @@ public function isAll() { return $this->getName() == self::ALL; } + + /** Disable prepend table name in group by + * @param bool $disableTablePrependInGroup + * @return void + */ + public function setDisableTablePrependInGroup(bool $disableTablePrependInGroup) + { + $this->disableTablePrependInGroup = $disableTablePrependInGroup; + } + + /** + * @return bool + */ + public function getDisableTablePrependInGroup() + { + return $this->disableTablePrependInGroup; + } }