Tenho o seguinte código onde tenho duas queries, na primeira capturo o COUNT do campo nome_usuario, na segunda seleciono os campos que desejo. Gostaria de melhorar a performance, fazendo uma só query. Alguém pode me ajudar?
<?php
defined('BASEPATH') OR exit('No direct script access allowed');classTodosAgendamentosFuturos_modelextends CI_Model{publicfunction main($funcionario, $dataAtual, $limit, $start){//Array para guardar dados a serem retornados
$resultados = array();//QUERY TO BIND TOTALCOUNT
$sql ="SELECT DISTINCT COUNT(u.nome_usuario) AS total FROM horariosfuncionario hfs INNER JOIN usuario u INNER JOIN statushorariofuncionario shf INNER JOIN funcionario f INNER JOIN agendamento a INNER JOIN formapagamentosalao fps ON a.codigo_formapagamentosalao = fps.codigo_formapagamentosalao AND a.codigo_usuario = u.codigo_usuario AND a.codigo_horariosfuncionario = hfs.codigo_horariosfuncionario AND shf.codigo_statushorariofuncionario = hfs.codigo_statushorariofuncionario AND f.codigo_funcionario = hfs.codigo_funcionario WHERE STR_TO_DATE(hfs.data_horariosfuncionario, '%d/%m/%Y') > STR_TO_DATE(?, '%d/%m/%Y') AND f.codigo_funcionario = ? ORDER BY STR_TO_DATE(hfs.data_horariosfuncionario, '%d/%m/%Y'), STR_TO_DATE(hfs.horario_horariosfuncionario,'%H:%i')";
$total = $this->db->query($sql, array($dataAtual, $funcionario));//Selecionando todos agendamentos futuros
$sql ="SELECT DISTINCT u.nome_usuario, u.telefone1_usuario, u.telefone2_usuario, a.codigo_agendamento, hfs.horario_horariosfuncionario, hfs.data_horariosfuncionario, a.comentario_agendamento, fps.nome_formapagamentosalao FROM horariosfuncionario hfs INNER JOIN usuario u INNER JOIN statushorariofuncionario shf INNER JOIN funcionario f INNER JOIN agendamento a INNER JOIN formapagamentosalao fps ON a.codigo_formapagamentosalao = fps.codigo_formapagamentosalao AND a.codigo_usuario = u.codigo_usuario AND a.codigo_horariosfuncionario = hfs.codigo_horariosfuncionario AND shf.codigo_statushorariofuncionario = hfs.codigo_statushorariofuncionario AND f.codigo_funcionario = hfs.codigo_funcionario WHERE STR_TO_DATE(hfs.data_horariosfuncionario, '%d/%m/%Y') > STR_TO_DATE(?, '%d/%m/%Y') AND f.codigo_funcionario = ? ORDER BY STR_TO_DATE(hfs.data_horariosfuncionario, '%d/%m/%Y'), STR_TO_DATE(hfs.horario_horariosfuncionario,'%H:%i') LIMIT ".$limit." OFFSET ".$start;
$resultado = $this->db->query($sql, array($dataAtual, $funcionario));//Percorrendo resultados retornadosforeach($resultado->result()as $row){//Captura dia da semana da data enviada como parâmetro usando o helper dia_semana
$dia = diasemana($dataAtual);//Adiciona resultados no array resultados
array_push($resultados, array('nome_usuario'=> $row->nome_usuario,'telefone1_usuario'=> $row->telefone1_usuario,'telefone2_usuario'=> $row->telefone2_usuario,'codigo_agendamento'=> $row->codigo_agendamento,'horario'=> $row->horario_horariosfuncionario,'data'=> $row->data_horariosfuncionario,'nomeDiaSemana'=> $dia,'comentario'=> $row->comentario_agendamento,'formaPagamento'=> $row->nome_formapagamentosalao));}
$rows = $resultados;
$data = array("success"=>true,"totalCount"=>$total->row()->total,"menu"=>$rows
);
echo json_encode($data);}}
Pergunta
mnmn
Olá pessoal.
Tenho o seguinte código onde tenho duas queries, na primeira capturo o COUNT do campo nome_usuario, na segunda seleciono os campos que desejo. Gostaria de melhorar a performance, fazendo uma só query. Alguém pode me ajudar?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.