Я пытаюсь изменить некоторый код PHP, который был создан много лет назад в Codecharge, чтобы включить предложение Group By в оператор MYSQL.
Я проверил мой запрос MYSQL, и он отлично работает в phpmyadmin.Когда я добавляю его на страницу php, он возвращает ошибку, потому что предложения WHERE и ORDER кодируются в разных местах, а затем вызываются в строку запроса.Очевидно, что когда GROUP BY остается в SQL, он разрывается, потому что он вставляет его перед WHERE в цепочке $ this, поэтому мне нужно выяснить, куда можно вставить часть кода GROUP BY, чтобы он связывал все вместев правильном порядке и страница загружается как следует.Ниже приведены 3 раздела, которые объединяют SQL и предложения, и веб-страница загружается нормально.Я закомментировал версию SQL, поскольку она не работает должным образом без GROUP BY.
//SetOrder Method @5-0FECF370
function SetOrder($SorterName, $SorterDirection)
{
$this->Order = "book_name";
$this->Order = CCGetOrder($this->Order, $SorterName, $SorterDirection,
"");
}
//End SetOrder Method
//Prepare Method @5-C6449552
function Prepare()
{
$this->wp = new clsSQLParameters($this->ErrorBlock);
$this->wp->AddParameter("1", "urlshow_id", ccsInteger, "", "", $this->Parameters["urlshow_id"], "", false);
$this->wp->Criterion[1] = $this->wp->Operation(opEqual, "ttb_books.show_id", $this->wp->GetDBValue("1"), $this->ToSQL($this->wp->GetDBValue("1"), ccsInteger),false);
$this->Where = $this->wp->Criterion[1];
}
//End Prepare Method
//Open Method @5-33D1EC54
function Open()
{
$this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeBuildSelect");
$this->CountSQL = "SELECT COUNT(*) " .
"FROM (ttb_books INNER JOIN ttb_states ON " .
"ttb_books.state_id = ttb_states.state_id) INNER JOIN ttb_statuses ON " .
"ttb_books.status_id = ttb_statuses.status_id";
$this->SQL = "SELECT * " .
"FROM (ttb_books INNER JOIN ttb_states ON " .
"ttb_books.state_id = ttb_states.state_id) INNER JOIN ttb_statuses ON " .
"ttb_books.status_id = ttb_statuses.status_id ";
//$this->SQL = "SELECT ttb_books.book_id, ttb_books.book_name, ttb_books.show_id, ttb_states.state_name, COUNT(ttb_imgs.img_id) AS images " .
//"FROM (ttb_books INNER JOIN ttb_states ON ttb_books.state_id = ttb_states.state_id) " .
//"INNER JOIN ttb_statuses ON ttb_books.status_id = ttb_statuses.status_id " .
//"LEFT JOIN ttb_imgs ON ttb_books.book_id = ttb_imgs.book_id ";
$this->Group = "ttb_books.book_id, ttb_books.book_name, ttb_books.show_id, ttb_states.state_name";
$this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeExecuteSelect");
$this->RecordsCount = CCGetDBValue(CCBuildSQL($this->CountSQL, $this->Where, ""), $this);
$this->query(CCBuildSQL($this->SQL, $this->Where, $this->Order));
$this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterExecuteSelect");
$this->MoveToPage($this->AbsolutePage);
}
//End Open Method
В исходной версии кода просто перечислены все названия книг и отсортированы по названию книги.Моя версия также включает в себя COUNT, потому что я хочу видеть не только все названия книг, но и количество страниц для каждой книги в списке.Как я уже сказал, мой новый SQL прекрасно работает в phpmyadmin, и я уверен, что он будет работать и на странице, если я смогу заставить Группировку работать должным образом.Спасибо за вашу помощь!