2012-09-18 77 views
1

我正在使用dotProject(OpenSource项目管理工具),并且需要为我自己的目的做一些自定义的sql选择。从分隔字符串中选择

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 

注意到我不得不从sysvals表中选择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中选择这种分隔字符串?

回答

0

这些sysval_values可以作为阵列使用dPgetSysVal()方法:

在dotProject-限定的本方法>包括 - > main_functions.php

$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... 

在这里什么我试图用你的选择代码:

<?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_我的db表内线: