Ir para conteúdo
Entre para seguir isso  
mnmn

Select com subselect e condicional (Invalid use of group function)

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por Caio_Lourençon
      Olá estou desenvolvendo um projeto utilizando a extensão MySQLi, e nisso aproveitando para utilizar algumas funções orientada a objeto! Gostaria de tirar umas dúvidas em relação a listagem de dados, são duas perguntas:   1) Utilizar a função foreach() ao invés de um while() com a função fetch_array() dentro, tem uma listagem mais rápida ou mais lenta? Pois com ambas consigo trazer os dados, No momento estou utilizando a foreach por ser mais rápida de se digitar.
      2) Utilizo muitas listagens de tabelas diferentes na mesma página sempre chamando um novo SELECT, seria melhor criar uma função com um SELECT dentro para eu sempre reutiliza-lá ou não iria mudar muita coisa em questão de desempenho?
       
      Agradeço qualquer informação.
    • Por MateusDuarte
      Podem me ajudar? Sou novato em PHP e estou precisando de uma ajudinha.
      Tenho 2 tabelas no banco: filmes e generos.
      Faço o cadastro individual de todos os generos na tabela generos, e no cadastro de filmes eu puxo todos os generos por um multiple select. Até ai tudo certo, ele salva no banco de dados assim:
      genero1, genero2, genero3.
       
      Porém na hora de mostrar eu não sei separar eles das virgulas.
      Segue meu SELECT simples:
      <main class="content"> <?php $sql = "SELECT * FROM genero ORDER BY RAND()"; $result = $connect->query($sql); if($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $teste = $row["id_genero"]; ?> <section class="panel"> <h2><a id="links-generos" href="generos-filmes.php?id=<?php echo $row['id_genero'];?>"><?php echo $row["descricao"];?></a></h2> <div class="recentslider"> <div class="swiper-container"> <div class="swiper-wrapper"> <?php $sql_t = "SELECT * FROM filmes WHERE id_genero = ".$teste." ORDER BY RAND()"; $result_t = $connect->query($sql_t); if($result_t->num_rows > 0) { while($row_t = $result_t->fetch_assoc()) { ?> <div class="swiper-slide"><?php echo "<a href='single-filmes.php?id=".$row_t['id_filme']."&genero=".$row_t['id_genero']."';>";?><img src="capa/<?php echo $row_t["capa_filme"];?>"><h3 class="hometitle"><?php echo $row_t["titulo_filme"];?></h3></a></div> <?php }} else { echo "0 results"; } ?> </div> <div class="nextdirection recent-next"><img src="img/right-arrow.svg"> </div> <div class="leftdirection recent-prev"><img src="img/left-arrow.svg"> </div> </div> </div> </section> <?php }} else { echo "0 results"; } ?> </main> (Desculpa se não ficou alinhado, só copiei e colei.)

      Reparem que primeiro dou um select na tabela genero, e salvo o ID dela em uma variavel, e depois vou um select na tabela filmes usando a variavel que salvei antes como uma condição.
      Porem na tabela filmes, os generos estão salvos separados por virgula. Como consigo fazer um select separando ela das virgulas?
       
    • Por Gustavo2503
      Eu estou criando uma classe que cria modais usando React, eu preciso criar um modal dentro de um modal, para isso, eu quero chamar a mesma função dentro dela mesma. O modal é criado, mas o problema é que ele não abre, abre o modal principal (#modal-1), mas não abre o sub modal (#modal-2), veja como ficou meu código:
      index.html
      <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Modal</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script> <script src="js/modal.js" type="text/babel"></script> <link rel="stylesheet" href="css/modal.css"> </head> <body> <div align="center"> <h1>Modal</h1> </div> <button type="button" data-modal="modal-1">Open Modal</button> <div id="modal-content"></div> <script type="text/babel"> const contentSub = [ <h2>Title SubModal 1</h2>, <p>SubModal</p>, <small>Rodapé submodal 1</small> ]; const idSub = "modal-2"; const content = [ <h2>Title 1</h2>, <section> <button type="button" data-modal="modal-2">Open SubModal</button> <Modal id={idSub} content={contentSub}/> </section>, <small>Rodapé 1</small> ]; const id = "modal-1"; ReactDOM.render( <Modal id={id} content={content}/>, document.getElementById('modal-content') ); </script> </body> </html> js/modal.js
      class Modal extends React.Component{ constructor(props) { super(props); this.id = this.props.id; this.backgroudColorHeader = this.props.backgroudColorHeader === undefined ? 'rgba(103, 117, 240, 1)' : this.props.backgroudColorHeader; this.textColorHeader = this.props.textColorHeader === undefined ? '#fff' : this.props.textColorHeader; this.backgroudColorBody = this.props.backgroudColorBody === undefined ? 'rgba(255, 255, 255, 1)' : this.props.backgroudColorBody; this.textColorBody = this.props.textColorBody === undefined ? '#000' : this.props.textColorBody; this.backgroudColorFooter = this.props.backgroudColorFooter === undefined ? 'rgba(103, 117, 240, 1)' : this.props.backgroudColorFooter; this.textColorFooter = this.props.textColorFooter === undefined ? '#fff' : this.props.textColorFooter; this.borderRadius = this.props.borderRadius === undefined ? '8px' : this.props.borderRadius; this.content = this.props.content === undefined ? [<h2>header content</h2>, <p>body content</p>, <p>footer content</p>] : this.props.content; this.size = this.props.size === undefined ? 3 : this.props.size; } closeModal = () => { $('#'+this.id).removeClass("show"); $('body').removeClass("overflow-hidden"); }; render(){ $(`[data-modal]`).click( function () { var id = $(this).attr("data-modal"); var el = document.getElementById(id); $(el).addClass("show"); $('body').addClass("overflow-hidden"); }); var background, text; background = this.backgroudColorHeader; text = this.textColorHeader; const transparencyBackgroundHeader = background.substring(background.length-2,background.length-1) -.1; const backgroundColorHeader = `${background.substring(0,background.length-2)}${transparencyBackgroundHeader})`; const styleColorHeader = { backgroundColor: backgroundColorHeader, color: text, borderBottom: `1px solid ${background}` }; background = this.backgroudColorBody; text = this.textColorBody; const styleColorBody = { backgroundColor: background, color: text }; background = this.backgroudColorFooter; text = this.textColorFooter; const transparencyBackgroundFooter = background.substring(background.length-2,background.length-1) -.1; const backgroundColorFooter = `${background.substring(0,background.length-2)}${transparencyBackgroundFooter})`; const styleColorFooter = { backgroundColor: backgroundColorFooter, color: text, borderTop: `1px solid ${background}` }; const styleBorderRadius = {borderRadius: this.borderRadius}; const eDivision = ['h', 'b', 'f']; const eContent = this.content; var div = []; for (var i=0;i<eContent.length;i++){ const part = eDivision[i].replace('h', 'header').replace('b', 'body').replace('f', 'footer')+"-modal"; const closeModal = i === 0 ? <span onClick={this.closeModal} className="close-modal"><i className="material-icons">close</i></span> : "" ; var style; if (i===0) style = styleColorHeader; else if (i===1) style = styleColorBody; else style = styleColorFooter; div.push(<div key={i+1} className={part} style={style}> {closeModal} {eContent[i]} </div>); } const eSize = this.size; const s = ['s', 'm-s', 'm', 'm-l', 'l']; const size = s[eSize-1]; const classModal = (size !== "s" && size !== "m-s" && size !== "m" && size !== "m-l" && size !== "l") ? 'modal-modal modal-m' : "modal-modal modal-"+size; return <div id={this.id} className={classModal}> <div className="overflow-modal"> <div className="container-modal" style={styleBorderRadius}> {div} </div> </div> </div>; } }  
    • Por GustavoJacob15
      Quando eu executo esse fonte, trás o resultado triplicado
       
       
       
      SELECT CN9_NUMERO AS 'CONTRATO', CONVERT(DATE, SUBSTRING(CN9_DTINIC, 1, 4) + '-' + SUBSTRING(CN9_DTINIC, 5, 2) + '-' + SUBSTRING(CN9_DTINIC, 7, 2)) AS 'DT INICIO', CONVERT(DATE, SUBSTRING(CN9_DTFIM, 1, 4) + '-' + SUBSTRING(CN9_DTFIM, 5, 2) + '-' + SUBSTRING(CN9_DTFIM, 7, 2)) AS 'DT FIM', CN9_NUMERO AS 'CENTRO DE CUSTO', CN9_ZZEMTI AS 'ART EMITIDA', CONVERT(DATE,CN9_ZZDTVA) AS 'VALIDADE DA ART', CN9_VLATU AS 'VALOR CONTRATO', CNC_CLIENT AS 'CLIENTE', CNC_LOJACL AS 'LOJA CLIENTE', A1_NOME AS 'NOME CLIENTE', CNE_PEDIDO AS 'PEDIDO', CNE_PERC AS 'PERCENTUAL', C6_NOTA AS 'NOTA FISCAL', E1_NUM AS 'NUMERO', CNE_REVISA, CONVERT(DATE,E1_BAIXA) AS 'DT BAIXA', CNF_VLPREV AS 'VALOR PREVISTO', CNF_PARCEL AS 'PARCELA', CONVERT(DATE,CNF_DTVENC) AS 'VENCIMENTO' FROM CN9010 CN9 INNER JOIN CNC010 CNC ON CNC.CNC_NUMERO = CN9.CN9_NUMERO AND CNC.D_E_L_E_T_ ='' INNER JOIN SA1010 A1 ON CNC.CNC_CLIENT = A1.A1_COD AND CNC.CNC_LOJACL = A1.A1_LOJA AND A1.D_E_L_E_T_ ='' INNER JOIN CNF010 CNF ON CNF.CNF_CONTRA = CN9.CN9_NUMERO AND CN9.D_E_L_E_T_='' INNER JOIN CNE010 CNE ON CNE.CNE_CONTRA = CNF.CNF_CONTRA AND CNE.D_E_L_E_T_='' INNER JOIN SC6010 C6 ON C6.C6_NUM = CNE.CNE_PEDIDO AND C6.D_E_L_E_T_ ='' INNER JOIN SE1010 E1 ON E1.E1_NUM = C6.C6_NOTA AND E1.D_E_L_E_T_ ='' AND E1.E1_TIPO ='NF' WHERE CN9.D_E_L_E_T_='' AND CN9_NUMERO = '201000272' AND CN9_REVISA = '002' AND CN9.D_E_L_E_T_='' AND CNF_CONTRA = '201000272' AND CNF_REVISA = '002' AND CNF.D_E_L_E_T_='' AND CNE_CONTRA = '201000272' AND CNE_REVISA = '002' AND CNE.D_E_L_E_T_='' AND E1_PREFIXO = 'SRV' AND CNC_NUMERO = '201000272' AND CNC_REVISA = '002' GROUP BY CN9_NUMERO,CN9_REVISA,CN9_DTINIC,CN9_DTFIM,CN9_NUMERO,CN9_ZZEMTI,CN9_ZZDTVA,CN9_VLATU,CNC_CLIENT,CNC_LOJACL, A1_NOME, CNE_PEDIDO, CNE_PERC, C6_NOTA, E1_NUM, CNE_REVISA, E1_BAIXA, CNF_VLPREV, CNF_PARCEL, CNF_DTVENC  
    • Por reginaldo123
      quero fazer uma consulta que retorna as ultimas mensagens por data e agrupa pelo id_an

      $query="SELECT id_mensagem ,id_an,id_usuario,mensagem,data,id_p FROM mensagem WHERE  id_usuario='{$id_usuario}' ORDER BY data desc
       GROUP by id_an";
      mas esta dando erro a consulta sql
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.