Как считать, группировать, объединять и где кодировать - PullRequest
1 голос
/ 06 апреля 2020

Это моя таблица

enter image description here

Я хочу создать этот результат

enter image description here

Могу ли я создать это в моей модели? Это моя модель:

function test(){
$this->db->select('a.id, a.name, a.city, COUNT(*) AS totala');
$this->db->select('b.name, COUNT(*) AS totalb');
$this->db->from('tabela as a');
$this->db->join('a.name = b.name');
$this->db->group_by('a.name');
$this->db->order_by('a.id','DESC');
$this->db->where('city'='BDG');
return;

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Ваша схема

Table A Table B

Запрос

SELECT table_a.name, table_a.a_total, table_b.b_total
FROM (
    SELECT a.name as name, count(a.name) as a_total 
    FROM test.table_a as a
    group by a.name
) as table_a
INNER JOIN (
    SELECT b.name as name, count(b.name) as b_total 
    FROM test.table_b as b
    group by b.name
) as table_b
ON table_a.name = table_b.name

Выход

enter image description here

0 голосов
/ 07 апреля 2020

Это не самый чистый, но это должно работать:

$where = "city = 'BDG'";
$group = "NAME";
$where = "ID ASC";

function test($where,$group,$order){
    $this->db->select("a.name, a.city, COUNT(*) AS totala, (select count(b.id) from tableb as b where a.name = b.name) as totalb");
    $this->db->from('tabela as a');
    $this->db->group_by($group);
    $this->db->order_by($order);
    $this->db->where($where);
    return;
}
0 голосов
/ 06 апреля 2020

Это MySQL запрос, который делает свое дело:

SELECT tablea.name as "NAME", totala as "TOTAL A", totalb as "TOTAL B"
FROM (
    SELECT `name`, count(*) AS totala
    FROM A
    WHERE city = 'BDG'
    GROUP BY `NAME`
) AS tablea
LEFT JOIN (
    SELECT `name`, count(*) AS totalb
    FROM B
    WHERE city = 'BDG'
    GROUP BY `NAME`
) AS tableb 
ON tablea.name = tableb.name;

Я не знаю, возможно ли это с вашим построителем запросов. Может быть, добавить его как необработанный запрос или склеить результат двух запросов вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...