1

私は dotProject (オープンソース プロジェクト管理ツール) を使用しており、独自の目的でカスタム 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 でこの種の区切り文字列から選択するより良い方法はありますか?

4

1 に答える 1

0

dPgetSysVal()これらの sysval_values は、メソッドを使用して配列として取得できます。

dotProject->includes -> 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_ my db テーブル拡張 :)

于 2013-02-04T08:19:10.790 に答える