Jump to content

mnmn

Members
  • Content count

    13
  • Joined

  • Last visited

Community Reputation

0 Comum

About mnmn

  1. 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); } }
  2. mnmn

    Ajax dentro de outro ajax

    Olá pessoal. Podem me ajudar? Tenho uma requisição ajax onde no success dela eu chamo outra requisição ajax e na segunda requisição eu preciso capturar o valor da primeira requisição. O valor que preciso está na linha: 23 (variável dados); Onde tento acessar esse valor e está dando erro é na linha: 54 (está dando o erro: Uncaught TypeError: Cannot read property 'resultado' of undefined) https://gist.github.com/anonymous/771a6ee75597fdd3faa9
  3. mnmn

    Obter fuso horário do MySQL

    Olá pessoal... Estou usando banco de dados MySQL e preciso obter os seguintes dados do meu servidor: dia, mês, ano, hora, minuto, fuso horário. Então já estou capturando: Dia: SELECT Day(now()); Mês: SELECT Month(now()); Ano: SELECT Year(now()); Hora: SELECT Hour(now()); Minuto: SELECT Minute(now()); Ainda não sei como capturar o fuso horário, poderiam me ajudar?
  4. Olá pessoal, tudo bom? Estou usando a linguagem JavaScript e estou com um problema: tenho no banco de dados MySQL o cadastro do fuso horário dos clientes. Exemplo: -3, -4, +1 Então preciso capturar a data e hora atual do fuso horário pesquisado. Alguém sabe como posso resolver essa questão? Toda ajuda é bem vinda, desde já agradeço.
  5. Olá pessoal, tudo bom? Poderiam me ajudar? Depois de executar o primeiro select preciso capturar o valor de duas calunas para cada linha retornada na consulta. As colunas que preciso capturar são: horario_horariofuncionario e tempo_servicosalao. Após capturar os valores dessas colunas, necessito usar esses valores no select que está dentro do laço WHILE. Porém a variável está vindo com valor diferente: deveria ser '21:00' mas está vindo :00 <?php include 'conectar.php'; $servico = $_GET['servico']; $data = $_GET['data']; $diaDaSemana = $_GET['diaDaSemana']; $stmt = $conn->query("SET CHARACTER SET utf8"); $stmt = $conn->query("SET NAMES utf8"); //Selecionando horários disponíveis na data selecionada para todos profissionais que fizerem o serviço selecionado $stmt = $conn->prepare("SELECT hf.horario_horariofuncionario, hf.codigo_horariofuncionario, sf.codigo_servicosalao, s.nome_servico, ss.tempo_servicosalao, ss.preco_servicosalao, hf.data_horariofuncionario, hf.nomeDiaSemana_horariofuncionario, f.codigo_funcionario, f.nome_funcionario, f.apelido_funcionario, f.foto_funcionario FROM servicosalao ss NATURAL JOIN servico s NATURAL JOIN horariofuncionario hf NATURAL JOIN funcionario f NATURAL JOIN servicofuncionario sf WHERE sf.codigo_servicosalao = :servico AND hf.data_horariofuncionario = :data AND hf.nomeDiaSemana_horariofuncionario = :diaDaSemana AND hf.codigo_statushorariofuncionario IN (1,3) ORDER BY STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i')"); $stmt->bindParam(':servico', $servico, PDO::PARAM_INT); $stmt->bindParam(':data', $data, PDO::PARAM_STR, 10); $stmt->bindParam(':diaDaSemana', $diaDaSemana, PDO::PARAM_STR, 15); $stmt->execute(); //Criando array $rows = array(); //Percorrendo resultados retornados while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $horario = $row['horario_horariofuncionario']; $tempo = $row['tempo_servicosalao']; $stmt = $conn->prepare("SELECT hf.horario_horariofuncionario FROM horariofuncionario hf NATURAL JOIN servicofuncionario sf WHERE sf.codigo_servicosalao = :servico AND hf.data_horariofuncionario = :data AND hf.nomeDiaSemana_horariofuncionario = :diaDaSemana AND hf.codigo_statushorariofuncionario = 2 group by (hf.horario_horariofuncionario) HAVING STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') BETWEEN STR_TO_DATE($horario,'%H:%i') AND SEC_TO_TIME( SUM( TIME_TO_SEC( STR_TO_DATE($horario,'%H:%i') ) + TIME_TO_SEC( STR_TO_DATE($tempo,'%i') ) ) )"); $stmt->bindParam(':servico', $servico, PDO::PARAM_INT); $stmt->bindParam(':data', $data, PDO::PARAM_STR, 10); $stmt->bindParam(':diaDaSemana', $diaDaSemana, PDO::PARAM_STR, 15); $stmt->execute(); //Recebendo o número de linhas retornadas $rows = $stmt->fetchAll(); //Contando o número de linhas retornadas $total = count($rows); //Se não retornou resultados if($total < 1) { $rows[] = $row; } } echo json_encode($rows); ?>
  6. Olá pessoal, poderiam me ajudar? Tenho as seguintes tabelas: CREATE TABLE horariofuncionario ( codigo_horariofuncionario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, codigo_statushorariofuncionario INTEGER UNSIGNED NOT NULL, codigo_funcionario INTEGER UNSIGNED NOT NULL, horario_horariofuncionario VARCHAR(5) NOT NULL, data_horariofuncionario VARCHAR(10) NOT NULL, nomeDiaSemana_horariofuncionario VARCHAR(15) NOT NULL, PRIMARY KEY(codigo_horariofuncionario), FOREIGN KEY(codigo_funcionario) REFERENCES funcionario(codigo_funcionario) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(codigo_statushorariofuncionario) REFERENCES statushorariofuncionario(codigo_statushorariofuncionario) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE statushorariofuncionario ( codigo_statushorariofuncionario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome_statushorariofuncionario VARCHAR(30) NOT NULL, PRIMARY KEY(codigo_statushorariofuncionario) ); CREATE TABLE servicosalao ( codigo_servicosalao INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, codigo_salao INT NOT NULL, codigo_servico INTEGER UNSIGNED NOT NULL, preco_servicosalao VARCHAR(20) NULL, tempo_servicosalao INTEGER UNSIGNED NULL, descricao_servicosalao VARCHAR(200) NULL, PRIMARY KEY(codigo_servicosalao), FOREIGN KEY(codigo_salao) REFERENCES salao(codigo_salao) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(codigo_servico) REFERENCES servico(codigo_servico) ON DELETE NO ACTION ON UPDATE NO ACTION ); Preciso selecionar os HORARIOFUNCIONARIO.horario_horariofuncionario em que o HORARIOFUNCIONARIO.codigo_statushorariofuncionario seja 1 ou 3 e que não contenha nenhum registro na tabela horariofuncionario em que o HORARIOFUNCIONARIO.horario_horariofuncionario esteja entre o HORARIOFUNCIONARIO.horario_horariofuncionario e o HORARIOFUNCIONARIO.horario_horariofuncionario + SERVICOSALAO.tempo_servicosalao e o HORARIOFUNCIONARIO.codigo_statushorariofuncionario seja igual a 2. Então tenho a query: SELECT hf.horario_horariofuncionario FROM horariofuncionario hf WHERE hf.codigo_statushorariofuncionario IN (1,3) HAVING (SELECT COUNT(hf.codigo_horariofuncionario) FROM horariofuncionario hf NATURAL JOIN servicosalao ss WHERE hf.codigo_statushorariofuncionario = 2 AND STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') BETWEEN STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') AND SEC_TO_TIME( SUM( TIME_TO_SEC( STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') ) + TIME_TO_SEC( STR_TO_DATE(ss.tempo_servicosalao,'%H:%i') ) ) ) ) < 1; Está retornando o erro: Invalid use of group function ErrorNr 1111
  7. mnmn

    Uso de Group Function

    Olá pessoal, poderiam me ajudar com esse erro? Tenho o seguinte SELECT no qual preciso selecionar somente os horario_horariofuncionario que estejam em um determinado período de tempo (para isso uso a função BETWEEN) e com o codigo_statushorariofuncionario 1 ou 3, (para isso uso a função IN). O sub select não pode retornar nenhum resultado, por isso ao final do sub select adicionei = 0. SELECT hf.horario_horariofuncionario FROM horariofuncionario hf WHERE hf.codigo_statushorariofuncionario IN (1,3) AND (SELECT COUNT(hf.codigo_statushorariofuncionario) FROM horariofuncionario hf NATURAL JOIN servicosalao ss WHERE STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') BETWEEN (STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') AND SEC_TO_TIME( SUM( TIME_TO_SEC( STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') ) + TIME_TO_SEC( STR_TO_DATE(ss.tempo_servicosalao,'%i') ) ) ) ) AND hf.codigo_statushorariofuncionario = 2) = 0; Contudo essa query está retornando o erro: Invalid use of group function ErrorNr: 1111 Agradeço desde já a ajuda de todos.
  8. Olá pessoal. Tenho uma div que preciso centralizar-la verticalmente mas não estou conseguindo... visualmente o conteúdo dessa div está ficando a 50% do bottom. .foto_listas { position: absolute; width: 100px; height: 100px; margin-top: -50px; top: 50%; border-radius: 50px; margin-left: 0px; } Poderiam me ajudar? Grato desde já!!!
  9. mnmn

    Calcular data no MySQL

    Olá pessoal. Estou precisando calcular as datas anteriores ao dia atual na query abaixo, porém as datas no banco de dados estão com tipo Varchar. Alguém poderia me ajudar? SELECT data_horariofuncionario FROM horariofuncionario WHERE data_horariofuncionario > '17/09/2015'; Está retornando as datas que começam com dia a partir de 18, mas o mês está retornando mês 08, mês 09. O que devo fazer? Obrigado, desde já.
  10. Preciso selecionar todos horários dos funcionários (horario_horariofuncionario) de acordo com a filtragem de serviço, data e dia da semana. Estou conseguindo fazer esse select normalmente, porém como são vários horários (horario_horariofuncionario) está sendo gerado um novo resultado para cada novo horário encontrado... E nesses resultados, claro, o único atríbuto que os diferencia é o horario_horariofuncionario o resto dos atríbutos são todos iguais. Então o que eu gostaria é que todos os horario_horariofuncionario fossem retornados em APENAS UM RESULTADO juntamente com o restante dos atríbutos em vez de retornar um novo resultado para cada horario_horariofuncionario... SELECT hf.horario_horariofuncionario, hf.codigo_horariofuncionario, s.nome_servico, ss.tempo_servicosalao, ss.preco_servicosalao, hf.data_horariofuncionario, ds.nome_diasemana, f.nome_funcionario, f.apelido_funcionario, f.foto_funcionario FROM servicosalao ss INNER JOIN servico s INNER JOIN diasemana ds INNER JOIN horariofuncionario hf INNER JOIN funcionario f INNER JOIN servicofuncionario sf ON hf.codigo_funcionario = f.codigo_funcionario WHERE sf.codigo_servicosalao = :servico AND hf.data_horariofuncionario = :data AND ds.nome_diasemana = :diaDaSemana AND hf.codigo_statushorariofuncionario = 1;
  11. Motta, estou com um outro probleminha, poderia ajudar? Preciso selecionar todos horários dos funcionários (horario_horariofuncionario) de acordo com a filtragem de serviço, data e dia da semana. Estou conseguindo fazer esse select normalmente, porém como são vários horários (horario_horariofuncionario) está sendo gerado um novo resultado para cada novo horário encontrado... E nesses resultados, claro, o único atríbuto que os diferencia é o horario_horariofuncionario o resto dos atríbutos são todos iguais. Então o que eu gostaria é que todos os horario_horariofuncionario fossem retornados em APENAS UM RESULTADO juntamente com o restante dos atríbutos em vez de retornar um novo resultado para cada horario_horariofuncionario... SELECT hf.horario_horariofuncionario, hf.codigo_horariofuncionario, s.nome_servico, ss.tempo_servicosalao, ss.preco_servicosalao, hf.data_horariofuncionario, ds.nome_diasemana, f.nome_funcionario, f.apelido_funcionario, f.foto_funcionario FROM servicosalao ss INNER JOIN servico s INNER JOIN diasemana ds INNER JOIN horariofuncionario hf INNER JOIN funcionario f INNER JOIN servicofuncionario sf ON hf.codigo_funcionario = f.codigo_funcionario WHERE sf.codigo_servicosalao = :servico AND hf.data_horariofuncionario = :data AND ds.nome_diasemana = :diaDaSemana AND hf.codigo_statushorariofuncionario = 1;
  12. Olá Motta! Consegui resolver, fiz assim: SELECT s.nome_salao, f.nome_funcionario FROM funcionario f INNER JOIN salao s ON s.email_salao = f.email_salao WHERE s.codigo_estado = 2 AND s.cidade_salao = 'São Paulo' AND s.bairro_salao = 'Limoeiros' ORDER BY f.nome_funcionario; Muito Obrigado!!!
  13. Olá amigos, poderiam me ajudar? Tenho no meu banco de dados uma tabela salao que tem N registros na tabela funcionários. SELECT s.nome_salao, f.nome_funcionario FROM funcionario f NATURAL JOIN salao s WHERE s.email_salao IN (SELECT email_salao FROM salao WHERE codigo_estado = 2 AND cidade_salao = 'São Paulo' AND bairro_salao = 'Limoeiros') ORDER BY f.nome_funcionario; Tenho uma query em que desejo selecionar o nome do salão ao qual o funcionário pertence. Porém quero fazer essa pesquisa para todos os salões que estejam em determinada localidade. A subquery retorna dois salões, e para cada salão tenho vários funcionários. Então quero retornar somente o nome do salão ao qual cada um dos funcionários pertence.
×

Important Information

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