簡體   English   中英

需要向Codecharge生成的PHP / SQL添加Group By語句

[英]Need to add a Group By statement to PHP/SQL generated from Codecharge

我正在嘗試修改一些在Codecharge中創建的PHP代碼,以在MYSQL語句中包含Group By子句。

我已經測試了我的MYSQL查詢,它在phpmyadmin中表現出色。 當我將其帶入php頁面時,它會踢回一個錯誤,因為WHERE和ORDER子句在不同的位置編碼,然后調用查詢字符串。 顯然,當在SQL中保留GROUP BY時,它會中斷,因為它是在$ this鏈中的WHERE之前插入它,因此我需要弄清楚我可以在哪里插入GROUP BY部分代碼,以便將它們全部串在一起按照正確的順序加載頁面。 以下是將SQL和子句組合在一起的3個部分,並且網頁可以正常加載。 我按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中可以正常工作,而且如果可以使分組正常工作,我相信它也會在頁面上顯示。 謝謝您的幫助!

好的,這就是我所做的。 我刪除了CCBuildSQL行的$ this-> Where部分,並將WHERE直接放入sql語句中,這使我可以使用GROUP BY並獲得所需的結果。

    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 ttb_books.book_id, ttb_books.book_name, ttb_books.owned, ttb_books.show_id, ttb_shows.show_name, ttb_states.state_name, COUNT(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 " .
    "INNER JOIN ttb_shows ON ttb_books.show_id = ttb_shows.show_id " .
    "LEFT JOIN ttb_imgs ON ttb_books.book_id = ttb_imgs.book_id WHERE ttb_books.show_id=" . $this->Parameters["urlshow_id"] .
    " GROUP BY ttb_books.book_id, ttb_books.book_name, ttb_books.owned, ttb_books.show_id, ttb_shows.show_name, 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->Order));
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterExecuteSelect");
    $this->MoveToPage($this->AbsolutePage);
}

看來您不在IDE中,而是直接更改生成的代碼。 進入CodeCharge IDE,選擇要修改的控件,然后創建一個自定義代碼事件,然后將調整后的SQL放在此處。

http://docs.codecharge.com/studio50/html/index.html?http://docs.codecharge.com/studio50/html/ProgrammingTechniques/HowTo/CustomizingDataSource/ModifyOrderBy.html?toc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM