我正在处理脚本的附加组件。这是一个旧的附加组件,由我曾经知道的其他人写的,但后来就死了。为了我学习更多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号。
感谢您的帮助!
答案 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...
。