Crie um ChartJS com 2 tabelas de banco de dados

PuxuL

Estou tentando criar um gráfico (ChartJS) que combine 2 tabelas do meu banco de dados.

Caso:

Base de dados

  • tableObject
    -- user_id
    -- object_id
    -- object_name
    -- object_date_created (AAAA-MM-DD)

  • tableObjectAmount
    -- object_amount_id
    -- object_id (correspondente ao tableObject)
    -- object_total

Gostaria de criar um gráfico que exiba object_amount / object_date; e mostrando apenas quando tableObject->user_id == user_id do meu aplicativo.

Esse é meu problema.

Então meu aplicativo roda no Codeingniter, aqui meu código:

public function index() {

    $objectsArray = array();
    $objectsDates = [];
    $objectsAmounts = [];

    $this->db->select('*');
    $this->db->from('objects');
    $this->db->where('user_id', $this->session->userdata('user_id'));
    $objectsDatesQuery = $this->db->get();


    foreach ($objectsDatesQuery->result() as $objectsDatesQueryRow) {
        $objectsDates['object_id'] = $objectsDatesQueryRow->object_id;
        $objectsDates['date'] = $objectsDatesQueryRow->object_date_created;


        $this->db->select('*');
        $this->db->from('object_amounts');
        $this->db->where('object_id', $objectsDates['object_id']);
        $objectsAmountsQuery = $this->db->get();

        foreach ($objectsAmountsQuery->result() as $objectsAmountsQueryRow) {
            $objectsDates['object_date'] = $objectsDatesQueryRow->object_date_created;
            $objectsAmounts['object_total'] = $objectsAmountsQueryRow->object_total;

            $objectsArray = array(
                'object_date' =>  $objectsDatesQueryRow->object_date_created,
                'object_total' => $objectsAmounts['object_total'],
            );
        }
    }
}

O código JS do meu gráfico:

    var ctx = document.getElementById('myChart').getContext('2d');
        ctx.height = 246;
    var chartData = {"jsonarray": <?php echo json_encode($objectsArray); ?>};

    var labels = <?php echo json_encode($objectsArray['object_date']) ?>;
    var data = <?php echo json_encode($objectsArray['object_total']) ?>;

    var chart = new Chart(ctx, {
        // The type of chart we want to create
        type: 'bar',

        // The data for our dataset
        data: {
            labels: labels,
            datasets: [
                {
                    label: 'Object',
                    borderColor: "black",
                    color: 'red',
                    backgroundColor: "white",
                    height: 200,
                    pointRadius: 0,
                    data: data
                }
            ]
        },
        options: {
            plugins: {
                legend: {
                    display: false
                }
            },
            responsive: true,
            maintainAspectRatio: false,
            scales: {
                y: {
                    min: 0,
                    color: 'black'
                },
                x: {
                    min: 0,
                    color: 'black',
                }
            }
        }
    });

Quando eu faço

var_dump(json_encode($objectsArray))

Eu tenho

string(55) "{"objet_date":"2022-03-29","object_total":"3500.00"}"

E finalmente, meu chartJS:

Resultado do meu chartJS

Muito obrigado por qualquer ajuda!

Marleen

Você provavelmente deseja usar uma junção e obter os dados em uma consulta:

$this->db->select('o.object_date_created, SUM(oa.object_total) AS total');
$this->db->from('objects o');
$this->db->join('object_amounts oa', 'o.object_id = oa.object_id', 'left outer');
$this->db->where('o.user_id', $this->session->userdata('user_id'));
$this->db->group_by('o.object_date_created');
$this->db->order_by('o.object_date_created', 'ASC');
$objectsArray = $this->db->get()->result_array();

Isso seleciona todos os objetos para um determinado usuário da tabela de objetos e, para cada objeto, encontra os object_amounts correspondentes na tabela object_amounts. O left outeron the jointambém inclui objetos sem object_amounts correspondentes.

Suponho que você queira exibir a soma dos object_totals para cada object_date_created: group_byagrupa os totais por data, SUM(oa.object_total)soma os totais para cada data e, order_byem seguida, classifica as somas resultantes por data.

E no seu JavaScript:

var chartData = JSON.parse(<?= json_encode($objectsArray); ?>);

var labels = chartData.map( el => el.object_date_created );
var data = chartData.map( el => el.total );

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Crie um diagrama ER ou qualquer diagrama de banco de dados com tabelas já existentes no postgresql

Crie um novo banco de dados e tabelas dinamicamente

Crie tabelas de banco de dados a partir de modelos em django 1.10 com Postgres

Crie um banco de dados mysql com Django usando Docker

Crie um novo banco de dados com MySQL Workbench

Crie um banco de dados e uma tabela com dockerfile

Crie um procedimento com a opção Alterar banco de dados

Crie um banco de dados cloudant com Node-RED

Quarto Android: Um banco de dados com várias tabelas

mysqldump um banco de dados com condição nas tabelas

Compare com tabelas em um banco de dados mysql

Crie várias tabelas de banco de dados com nodejs para postgresql

Crie um banco de dados e tabelas em tempo de execução no Rails

Como permitir que o Hibernate crie tabelas no banco de dados automaticamente quando usado com JPA?

Crie visualizações com uma coluna removida para todas as tabelas no banco de dados

Crie um novo banco de dados e tabelas do Access usando Python

Crie dados hierárquicos de 2 tabelas

O banco de dados H2 é adequado como banco de dados embutido com grandes tabelas?

Crie banco de dados no mysql com golang

Crie um banco de dados Django

Compare tabelas com BOOLEAN no banco de dados

liste as tabelas em um banco de dados

Posso fazer com que o H2 crie automaticamente um esquema em um banco de dados na memória?

Relacionar 2 tabelas no banco de dados

Criando um script de banco de dados sql com tabelas com várias chaves estrangeiras

Importe vários arquivos de texto delimitados para um banco de dados SQL Server e crie tabelas automaticamente

Importe vários arquivos de texto delimitados para um banco de dados SQL Server e crie tabelas automaticamente

Banco de dados SQLite - Crie novas tabelas e defina o nome da tabela por meio de um pop-up

Crie um Symfony / Twig Form com dados do banco de dados

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo