Jump to content
Sign in to follow this  
mnmn

COUNT com outros campos na mesma query

Recommended Posts

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?

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class TodosAgendamentosFuturos_model extends CI_Model{

	public function 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 retornados
		foreach ($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);
	}
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By lUANZIKA3
      minha pagina contém uma table que
      exibe a ultima id da minha DB porém ela não fica ativa.
      a ultima id só é exibida se o form tiver sido enviado.
      ↓table aonde é exibida a Insert_id
      <table class="table table-dark" method="POST" action="processa.php"> <thead> <tr> <th scope="col">#</th> <th scope="col">Ultimo ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td> <?php if(isset($_SESSION['id'])){ echo $_SESSION['id']; } ?></td> </tr> </tbody> </table> Agora a conexao.php
      <?php session_start(); $servidor = "localhost"; $usuario = "root"; $senha = ""; $dbname = "contas"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; if ($conn->query($result_usuario) === TRUE) { $id = $conn->insert_id; $_SESSION['id'] = "" . $id; } else { echo "Error: " . $result_usuario . "<br>" . $conn->error; } $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
    • By lUANZIKA3
      minha pagina contém uma table que
      exibe a ultima id da minha DB porém ela não fica ativa.
      a ultima id só é exibida se o form tiver sido enviado.
      ↓table aonde é exibida a Insert_id
      <table class="table table-dark" method="POST" action="processa.php"> <thead> <tr> <th scope="col">#</th> <th scope="col">Ultimo ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td> <?php if(isset($_SESSION['id'])){ echo $_SESSION['id']; } ?></td> </tr> </tbody> </table> Agora a conexao.php
      <?php session_start(); $servidor = "localhost"; $usuario = "root"; $senha = ""; $dbname = "contas"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; if ($conn->query($result_usuario) === TRUE) { $id = $conn->insert_id; $_SESSION['id'] = "" . $id; } else { echo "Error: " . $result_usuario . "<br>" . $conn->error; } $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
    • By lUANZIKA3
      Olá boa tarde, tenho uma form que pega os dados via POST funcionando corretamente, porém eu quero pegar somente o ultimo insert_id do banco de dados e exibir na pagina inicial só que não estou conseguindo, alguém por favor poderia me dar uma dica?
      codes↓
      ACTION="processa"
      processa.php
      <?php session_start(); include_once("conexao.php"); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
      conexao.php
      <?php $servidor = "localhost"; $usuario = "id12363089_dados"; $senha = "37875199"; $dbname = "id12363089_dados"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); INDEX.PHP
      <?php session_start(); ?> <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> <img src="giftcard.png" class="rounded mx-auto d-block" alt="Gift Card 50 Reais"> <br> <form method="POST" action="processa.php"> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">Seu Nome</span> </div> <input type="text" name="nome" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="basic-addon3">face, insta ou email para contato/</span> </div> <input type="text" name="face" class="form-control" id="basic-url" aria-describedby="basic-addon3"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">3 Pares de Numeros de 0 a 1000 EX: 10.20.30</span> </div> <input type="text" name="numeros" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <input type="submit" class="btn btn-success btn-lg btn-block"value="Participar do Sorteio"> <table class="table table-dark"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">ULTIMO ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td>Mark</td> <td>Otto</td> <td>AONDE EU QUERO INSERIR O ULTIMO ID</td> </tr> </tbody> </table>  
    • By lUANZIKA3
      Olá boa tarde, tenho uma form que pega os dados via POST funcionando corretamente, porém eu quero pegar somente o ultimo insert_id do banco de dados e exibir na pagina inicial só que não estou conseguindo, alguém por favor poderia me dar uma dica?
      codes↓
      ACTION="processa"
      processa.php
      <?php session_start(); include_once("conexao.php"); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
      conexao.php
      <?php $servidor = "localhost"; $usuario = "id12363089_dados"; $senha = "37875199"; $dbname = "id12363089_dados"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); INDEX.PHP
      <?php session_start(); ?> <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> <img src="giftcard.png" class="rounded mx-auto d-block" alt="Gift Card 50 Reais"> <br> <form method="POST" action="processa.php"> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">Seu Nome</span> </div> <input type="text" name="nome" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="basic-addon3">face, insta ou email para contato/</span> </div> <input type="text" name="face" class="form-control" id="basic-url" aria-describedby="basic-addon3"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">3 Pares de Numeros de 0 a 1000 EX: 10.20.30</span> </div> <input type="text" name="numeros" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <input type="submit" class="btn btn-success btn-lg btn-block"value="Participar do Sorteio"> <table class="table table-dark"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">ULTIMO ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td>Mark</td> <td>Otto</td> <td>AONDE EU QUERO INSERIR O ULTIMO ID</td> </tr> </tbody> </table>  
    • By RodrigoWD3
      Ola boa tarde, não sei se aqui e o tópico correto , tenho uma tabela de vendas , id , nome, id_vendedor (essa id identifica o vendedor)
      ID    |     produto      |        | id_vendedor |
      1     | computador x |          |  2 |
      2     | computador x |          |  2 |
      3     | computador x |          |  2 |
      4     | Mouse |                      |  1 |
       
      Como faço para ordenar da seguinte forma.   Quero contar quantas vezes o produto foi repetido, e ordenar pelo numero de repetições na tabela  SQL se alguém souber obrigado
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.