2013-12-16 6 views
0

У меня есть 2 вопроса.Объединение этих 2 запросов

public function fetchEvents(){ 

    $events = $this->cmsdb->query("SELECT * FROM tickets_events WHERE `active` = 1", true); //true just means if only one row is returned it will be key [0] so I can loop no matter how many rows returned 

if(empty($events)){ 
    return array(); 
    } 
    foreach ($events as $k => $event) { 
     $events[$k]['items'] = $this->cmsdb->query("SELECT *, FROM_UNIXTIME(date, '%W, %D %M %Y') as dateString 
           FROM tickets_items WHERE eventId = '" . intval($event['id']) . "' 
           AND public = 1 AND confirmed = 1 AND date > '" . time() . "' 
           ORDER BY date ", true); 
    } 
    return $events; 
} 

Я упростил первый запрос, я передать некоторые аргументы функции, чтобы отфильтровать какие события он возвращается, но эта часть не имеет отношения к этому вопросу.

Проблема у меня есть, если я хочу получить каждое событие и его элементы, он выполняет много запросов (в настоящее время имеется 691 событие). Есть ли способ объединить эти запросы вместе?

+0

Почему вы не делаете 'JOIN' между таблицами и не делаете ни одного запроса? – Minoru

+0

Я думаю, что, возможно, это был вопрос – Strawberry

ответ

2

Вы можете написать JOIN таблицы, чтобы получить тот же ответ. Это также должно быть намного лучше:

SELECT 
    i.* 
    ,FROM_UNIXTIME(i.date, '%W, %D %M %Y') as dateString 
FROM tickets_items i 
JOIN tickets_events e 
    ON i.eventId = e.id 
WHERE i.public = 1 
    AND i.confirmed = 1 
    AND e.active = 1 
    AND date > CURRENT_TIMESTAMP 
ORDER BY date 
Смежные вопросы