匹配SQL Id并获取并应用匹配值

时间:2018-04-28 02:57:24

标签: php sql database

我正在处理脚本的附加组件。这是一个旧的附加组件,由我曾经知道的其他人写的,但后来就死了。为了我学习更多php / sql的兴趣,我一直在努力。差不多,这是一个支持票系统。

现在,有一个文件可以在需要调用时保存所有方便的数据库功能。我正在制作一个列出所有门票及其状态的页面(新的,已回答的等等......),但我想添加它发送到的部门的名称。管理员可以创建部门,然后用户可以在制作故障单时选择其中一个部门。但问题是,离开代码的人从未真正将部门与门票合并。这是我目前的票证代码:

static function ticket_list() {
    return OW::getDbo()->queryForList("SELECT id,category_id,subject,requested_deletion,department_id,updated,status FROM ".SupportCenterDB::table_ticket()." ORDER BY updated DESC;");
}

“department_id”是这里的关键因素。有一个部门的数据库表,以及对“department_get”的调用,如下所示:

static function department_get($id) {
        $d=OW::getDbo();
        $res=$d->queryForList("SELECT * FROM ".SupportCenterDB::table_department()." WHERE id='".$d->escapeString($id)."';");
        return $res[0];
    }

所以,我把所有的门票都叫做:

$tickets_q=SupportCenterDB::ticket_list();

        $tickets=array();

        foreach($tickets_q as $data) {

            array_push($tickets,array(

                "text"=>$data["subject"],

                "updated"=>$data["updated"],

                "department"=>$data["department_id"],

                "status"=>$this->get_ticket_status($data),

                //"url_view"=>"/settings/tickets/view/${data["id"]}",

                "url_view"=>OW::getRouter()->urlForRoute("supportcenter-manage-tickets-view",array("id"=>$data["id"])),

                "url_delete"=>OW::getRouter()->urlForRoute("supportcenter-manage-tickets-delete",array("id"=>$data["id"])),

                "request_deletion"=>$data["requested_deletion"],

            ));


        }


        $this->assign("items",$tickets);

当我在表格上显示值时,这只显示所选部门的实际ID。在这种情况下,部门的文本值为“支持”,但ID为“1”。此代码将部门显示为id,因此为“1”。我想得到它所以收到的department_id的$ data将与我的Department表的其余部分匹配,这样我就可以实际显示Department文本。

基本上,我想从每个$ tickets_q获取department_id的值,并且id与相应部门的文本匹配,因此它显示实际名称而不是ID号。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您正在寻找的是Inner Join。您可以修改原始查询以在一个语句中完成此操作。这也假设您不需要(define subset? (lambda (st1 st2) (cond ((not (set? st1)) (error "Your first argument is not a set!")) ((not (set? st2)) (error "Your second argument is not a set!")) ((null? (st1)) #t) ((in? ((car st1) st2)) (subset? ((cdr st1) st2))) (else #f) ))) ,只需要department_id。如果确实需要,请将其添加回要获取的字段列表中。

department_name

注意:您应该真正考虑为SQL查询使用预准备语句,这样您就不会直接将参数传入select语句,即使它已在其上方定义。

更新: static function ticket_list() { $table_ticket = SupportCenterDB::table_ticket(); return OW::getDbo()->queryForList("SELECT id, category_id, subject, requested_deletion, table_departments.text, updated, status FROM {$table_ticket} JOIN table_departments ON table_departments.id = {$table_ticket}.department_id ORDER BY updated DESC;"); } 需要成为"department"=>$data["department_id"]。为了更清洁,你可以给该字段一个别名,这样你就可以知道你实际上在拉什么。

"department"=>$data["text"]

然后上面的行变为SELECT id, category_id, ..., table_departments.text AS department_name, updated, status...