SQL-запрос слияния 2 CodeIgniter - PullRequest
0 голосов
/ 23 января 2012

Я хотел бы объединить эти 2 запроса для получения моих данных в виде:

QUERY 1:

    $query = $this->db->query('SELECT ft_upload_data.*, ft_categories.*, ft_categories.category_name
    FROM ft_upload_data
    LEFT JOIN assigned_categories ON assigned_categories.ft_upload_data_id = ft_upload_data.post_id
    LEFT JOIN ft_categories ON ft_categories.cat_id = assigned_categories.ft_categories_id
    ORDER BY ft_upload_data.rank ASC
    ');

    return $query->result();

QUERY 2:

    $query2 = $this->db->query('SELECT a.post_id, 
    COUNT(*) AS num_comments
    FROM ft_upload_data a
    JOIN ft_comments c ON c.post_id = a.post_id
    GROUP BY a.post_id');

    return $query2->result();

Я не могу понять: / Есть идеи, чтобы обмануть это?

Спасибо!

1 Ответ

0 голосов
/ 23 января 2012

Самый простой (но не обязательно самый эффективный) способ - сделать это с помощью встроенного запроса:

SELECT ft_upload_data.*, ft_categories.*,
       (SELECT COUNT(*) 
        FROM ft_comments c 
        where c.post_id = ft_upload_data.post_id) AS num_comments
FROM ft_upload_data
LEFT JOIN assigned_categories 
       ON assigned_categories.ft_upload_data_id = ft_upload_data.post_id
LEFT JOIN ft_categories 
       ON ft_categories.cat_id = assigned_categories.ft_categories_id
ORDER BY ft_upload_data.rank ASC

Более эффективным способом было бы присоединиться к таблице и группе ft_comments по post_id (при условии, что это однозначно определяет строки ft_upload_data), например, так:

SELECT ft_upload_data.post_id,
       /* include the maximum of each required field from ft_upload_data and 
          ft_categories here, with appropriate aliases */
       COUNT(*) AS num_comments
FROM ft_upload_data
LEFT JOIN assigned_categories 
       ON assigned_categories.ft_upload_data_id = ft_upload_data.post_id
LEFT JOIN ft_categories 
       ON ft_categories.cat_id = assigned_categories.ft_categories_id
LEFT JOIN ft_comments c 
       on  c.post_id = ft_upload_data.post_id
GROUP BY ft_upload_data.post_id
ORDER BY max(ft_upload_data.rank) ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...