1

イベントのリストを取得しようとしています。また、どのメンバーがイベントに支払ったかを確認しています。次に、彼らが委員会に参加しているかどうか、管理者権限があるかどうかを確認したいと思います。

3 つの SQL クエリを使用し、次に 3 つの foreach ループを使用して配列を構築することで、これを成功させました。

これは 1 つの SQL クエリと 1 つの foreach ループで実行できると確信していますが、JOIN 手法はまだ習得していません。

Expression Engine、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));

**

ユーザーが支払った EVENT ID を見つけるための SQL

**

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コード

$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));

ADMIN 権限を検索する 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コード

$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