首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从分隔字符串中选择

从分隔字符串中选择
EN

Stack Overflow用户
提问于 2012-09-19 06:54:05
回答 1查看 94关注 0票数 1

我正在使用dotProject (OpenSource项目管理工具),需要为我自己的目的做一些自定义的sql选择。

代码语言:javascript
复制
select  u.user_username,
        p.project_name,
        p.project_start_date,
        p.project_end_date,
        SUBSTRING(sysval_value,LOCATE(CONCAT(p.project_status,'|'),sysval_value)+2,LOCATE('\n',sysval_value,LOCATE(CONCAT(p.project_status,'|'),sysval_value))-LOCATE(CONCAT(p.project_status,'|'),sysval_value)-2) as project_status 
from project_contacts pc
left join users u on pc.contact_id = u.user_id
left join sysvals s on s.sysval_title='ProjectStatus'
left join projects p on p.project_id=pc.project_id

请注意,我不得不从系统表中选择ProjectStatus的方式很糟糕。

ProjectStatus的sysval_value如下所示:0|Not Defined/n1|Proposed/n2|In Planning/n3|In Progress/n4|On Hold/n5|Complete/n6|Template/n7|Archived

不知道为什么会这样,我本以为会有一个带有主键和描述的状态表(可能只是为了减少项目中的表数)。

在MySQL中,有没有更好的方法从这种分隔字符串中进行选择?

EN

回答 1

Stack Overflow用户

发布于 2013-02-04 16:19:11

通过使用dPgetSysVal()方法,可以将这些sysval_values视为一个数组:

此方法在dotProject -> includes -> main_functions.php中定义

代码语言:javascript
复制
$arr = array();
$arr=dPgetSysVal("ProjectStatus");
$arr[0]----------> Not Defined
$arr[1]----------> Proposed
$arr[2]----------> In Planning
$arr[3]----------> In Progress
$arr[4]----------> On Hold
$arr[5]----------> Complete and so on...

下面是我尝试使用您的代码进行选择的方法:

代码语言:javascript
复制
<?php
require_once 'base.php';
require_once DP_BASE_DIR . '/includes/config.php';
require_once (DP_BASE_DIR . '/classes/csscolor.class.php'); // Required before main_functions
require_once (DP_BASE_DIR . '/classes/kses.class.php'); // Required before main_functions
require_once (DP_BASE_DIR . '/includes/main_functions.php');
require_once (DP_BASE_DIR . '/includes/db_adodb.php');
require_once (DP_BASE_DIR . '/includes/db_connect.php');

require_once (DP_BASE_DIR . '/classes/ui.class.php');
require_once (DP_BASE_DIR . '/classes/permissions.class.php');
require_once (DP_BASE_DIR . '/includes/session.php');
require_once (DP_BASE_DIR . '/includes/permissions.php');
require_once (DP_BASE_DIR . '/style/dp-grey-theme/overrides.php');

$q = new DBQuery;
$q->clear();
$q->addTable('project_contacts');
$q->addTable('users');
$q->addTable('projects');
$q->addTable('sysvals');
$q->addWhere('dotp_project_contacts.contact_id = dotp_users.user_id');
$q->addWhere('dotp_sysvals.sysval_title = "ProjectStatus"');
$q->addWhere('dotp_projects.project_id = dotp_project_contacts.project_id');
$values = $q->loadList();
$arr = array();
foreach ($values as $row) {
$arr=dPgetSysVal("ProjectStatus");
echo $row['user_username'].' '. $row['project_name'].' '. $row['project_start_date'].' '. $row['project_end_date'].' '. $arr[$row['project_status']].'<br>';
}
?>

dotp_ my db table extension :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12486237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档