从桥表中获取每个项目的状态ID结果



我希望你能帮我解决这个问题。

我有一个名为'events_delegates_bridge'的桥表,它有3个字段,'id', 'event_id'和'delegate_id'。

我也有名为"委托"one_answers"事件"的表。

我也有一个名为'delegate_status'的表,它有两个字段,'id'和'delegate_status'。

每个代表都有一个附加的状态,可以是"临时","确认"或"保留"。

Table : events_delegates_bridge |   Columns : id , event_id , delegate_id
Table : delegates
Table : events
Table : delegate_status | Columns : id , delegate_status (Provisional , Confirmed , Resit)

现在,在我的'delegates_model'类中,我根据每个表中相关的'id', 'delegate_status'和'events_delegates_bridge'加入表'delegate ', 'delegate_status' id'和'delegate_id',如下所示:

class Delegate_Model extends CI_Model {
    public function get_delegates() {
        $this->db->select( '*' );
        $this->db->from( 'delegates' );
        $this->db->from( 'delegate_status' );
        $this->db->join( 'events_delegates_bridge', 'events_delegates_bridge.delegate_id = delegates.id AND delegate_status.id = delegates.delegate_status_id', 'inner' );
        $query = $this->db->get();
        return $query->result();
    }
}

然后我使用'delegates_helper'函数集来做各种事情,其中之一是为每个包含其状态id的代表生成一个'status_id'变量,以便我可以将其与HTML表中的三列之一相关联,临时代表总数及其名称,确认代表总数及其名称,最后是总resits及其名称。

我正在生成这样的状态id:

function get_status_id( $delegates ) {
    foreach ( $delegates as $delegate ) {
        switch( $delegate->delegate_status ) {
            case 'Provisional':
                $status = 'Provisional';
                $status_id = 1;
            break;
            case 'Confirmed':
                $status = 'Confirmed';
                $status_id = 2;
            break;
            case 'Resit':
                $status = 'Resit';
                $status_id = 3;
            break;
            default:
                $status = 'Confirmed';
                $status_id = 2;
            break;
        }
    }
    return $status_id;
}

目前,每个$delegate->delegate_status都有我认为每个委托的所有记录,这使得这个函数总是显示为'Provisional', 1.

我知道我没有正确地处理这个问题,希望你能指导我如何做我需要的。谢谢。

注意:编辑

好的,所以我想要的输出是获得特定事件的每个代表,并将这些代表分成HTML中的3列,每个事件显示临时代表,确认代表和那些正在访问的代表。

Table : events_delegates_bridge |   Columns : id , event_id , delegate_id
Table : delegates       | Columns : id, delegate_first_name, delegate_last_name, delegate_status_id (1, 2, 3)
Table : events          | Columns : id, event_name, event_start_date
Table : delegate_status | Columns : id , delegate_status (Provisional , Confirmed , Resit)

我使用以下函数为事件表生成HTML。这些信息(变量)随后在视图中用于填充引导弹出窗口:

function delegate_status_total( $delegates, $event ) {
    $status_id = get_status_id( $delegates );
    $current_event_id = $event->id;
    foreach ( $delegates as $delegate ) {
        if( $delegate->event_id == $current_event_id ) {
            if( $delegate->delegate_status_id == $status_id ) {
                $delegate_status_ids[] = $delegate->delegate_status_id;
                $delegate_total = count( $delegate_status_ids );
            }
        }
    }
    return $delegate_total;
}
function delegate_info( $delegates, $event ) {
    $delegate_total = delegate_status_total( $delegates, $event );
    $status_id = get_status_id( $delegates );
    $current_event_id = $event->id;
    $delegate_info = "There are currently a total of $delegate_total Provisional delegates booked on this event.<br /><br />";
    $delegate_info .= '<ul>';
        foreach ( $delegates as $delegate ) {
                if( $delegate->event_id == $current_event_id ) {
                    if( $delegate->delegate_status_id == $status_id ) {
                        $delegate_info .= '<li>';
                            $delegate_info .= $delegate->delegate_first_name . ' ' . $delegate->delegate_last_name;
                        $delegate_info .= '</li>';
                    }
                }
        }
    $delegate_info .= '</ul>';
    return $delegate_info;
}

编辑

所以,当a在$delegate对象上执行foreach循环,然后设置$status_id时,它只设置第一个delegate的第一个id。如果我在foreach循环中var_dump() $delegate->delegate_status_id,如下所示:

foreach ( $delegates as $delegate ) {
    if( $delegate->event_id == $current_event_id ) {
        prettyDump( $delegate->delegate_status_id );
    }
}

它输出每个$delegate项中的每个delegate_status_id,正如您所期望的那样:

string(1) "1"
string(1) "2"
string(1) "3"
string(1) "1"

所以每个$delegate包含了每个其他delegate的delegate_status_ids,因为第一个是'Provisional', 1每个delegate的所有$status_id变量都被设置为这个。

必须有一种方法只检索特定的委托状态id?

您可以使用一个不带循环的查询来完成它。下面是一个例子

SELECT 
    *
FROM events_delegates_bridge AS edb
  LEFT JOIN events AS e
    ON e.id = edb.event_id
  LEFT JOIN delegates AS d
    ON d.id = edb.delegate_id
  LEFT JOIN delegate_status AS ds
    ON ds.id = d.delegate_status_id

演示

输出
id  event_id    delegate_id id  event_name  event_start_date    id  delegate_first_name delegate_last_name  delegate_status_id  id  delegate_status
----------------------------------------------------------------------------------------------------------------------------------------------------
1   1           1           1   A           2013-03-31          1   Ralf                Rudolph             1                   1   Provisional
2   2           2           2   B           2013-03-31          2   Clark               Filsh               2                   2   Confirmed
3   3           3           3   C           2013-03-31          3   Neil                Johnson             3                   3   Resit

如果只需要特定列,则使用tablename。

最新更新