1

我正在尝试提取事件列表,同时查看哪些成员为事件付费。然后我想看看他们是否在委员会中,看看他们是否有管理员权限。

我已经成功地做到了这一点,使用三个 SQL 查询,然后使用三个 foreach 循环来构建数组。

我确信这可以通过一个 SQL 查询和一个 foreach 循环来完成,但是我还没有掌握 JOIN 技术。

我正在使用表达式引擎、Codeigniter Active Record,我将向您显示 SQL 输出以及我当前的 EE 函数的样子。

谢谢您的帮助!:D

SQL 选择所有活动的事件

SELECT `id` as event_ID, `name` as event_name, `description` as event_description
FROM (`events`)
WHERE `events_category_id` =  '1'
AND `active` =  1
ORDER BY `name` asc

实现此目的的 EE 代码:

$query = $this->theDb->select('id as event_ID, name as event_name, description as event_description')
            ->order_by("name", "asc")
            ->get_where('events', array('event_category_id'=>$event_type,'active'=>1));

**

SQL 查找用户已支付的 EVENT ID

**

SELECT DISTINCT `products`.`event_ID` as joinedID
FROM (`transactions_items`)
JOIN `transactions` ON `transactions`.`id` = `transactions_items`.`id`
JOIN `products` ON `products`.`id` = `transactions_items`.`product_id`
JOIN `events` ON `events`.`id` = `products`.`event_ID`
WHERE `transactions`.`member_id` =  27500
AND `events`.`active` =  1
AND `event_category_id` =  '1'
ORDER BY `events`.`name` asc

EE CODE 来实现这一点

$query = $this->theDb->select('products.event_ID as joinedID')
        ->distinct()
        ->order_by("events.name", "asc")
        ->join('transactions', 'transactions.id = transactions_items.id')
        ->join('products', 'products.id = transactions_items.product_id')
        ->join('events', 'events.id = products.event_ID')
        ->get_where('transactions_items', array('transactions.member_id' => $memberID, 'events.active' => 1,'activity_category_id'=>$activity_type));

SQL 查找管理员权限

SELECT `events`.`id` as event_ID, `admins`.`admin_role_id` as role_id, `admins_roles`.`name` as role_description
FROM (`admins`)
JOIN `admins_roles` ON `admins`.`admin_role_id` = `admins_roles`.`id`
JOIN `events` ON `events`.`id` = `admins`.`event_ID`
WHERE `admins`.`member_id` =  27500
AND `events`.`active` =  1

EE CODE 来实现这一点

$query = $this->theDb->select('events.id as event_ID, admins.admin_role_id as role_id, admins_roles.name as role_description')
        ->join('admins_roles', 'admins.admin_role_id = admins_roles.id')    
        ->join('events', 'events.id = admins.event_ID') 
        ->get_where('admins', array('admins.member_id' => $memberID, 'events.active' => 1));    

对于每个循环

// Create list of Events setting defaults
foreach($events_list as $row)
{
    $combinedEvents[$row->event_ID] = array(
        'eventID' => $row->event_ID,
        'eventName' => $row->event_name,
        'eventDescription' => $row->event_description,
        'isJoined' => 0,
        'roleID' => 0,
        'roleDescription' => "",
    );
}
// Add Committee roles
foreach($admin_list as $row)
{
    $combinedEvents[$row->event_ID]['roleID'] = $row->role_id;
    $combinedEvents[$row->event_ID]['roleDescription'] = $row->role_description;
}   
// Add Transactions
foreach($transaction_list as $row)
{
    $combinedEvents[$row->joinedID]['isJoined'] = 1;
}
4

1 回答 1

0

我不太了解 FOREACH 部分,因为我从未接触过 PHP - 但您应该能够使用;with子句解决多个 SQL 查询。我创建了一个示例来回答此处此处的另一个问题。这是你要找的吗?

于 2013-07-17T14:20:34.927 回答