Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Sempre que você necessitar de mais de um valor em um mesmo campo use OR em vez de AND SELECT SUM(comissao) FROM comissoes WHERE cod = '94' OR cod = '82'
  2. O que são regras de MMN Binário? Que erro aparece?
  3. Quais os campos destas tabelas [cadastro], [estado] e [cidade]?
  4. UPDATE tabela2 t2 INNER JOIN tabela1 t1 ON t1.telefone = t2.telefone SET consta = 1; Para acelerar o processo tenha indices por telefone em ambas as tabelas.
  5. Só se ele tiver acesso ao console. Coloque senha no console do servidor. Siga as mesmas diretivas do post anterior. Que versão estás usando. A minha 5.1.69 não permite esta ação.
  6. Coloque senha no root. Só quem deve saber a senha são os dbas. O gerente deve ter um envelope lacrado com a senha dentro.
  7. Ok. Entendi. 1) O select abaixo separará os produtos de uma lista select id_produto, quantidade from tb_lista_itens where id_lista = ??2) O select abaixo separará e somará os preços dos produtos por fornecedor select pe.id_empresa, pe.id_produto, sum(pe.produto_emp_preco * li.quantidade) as vltotalitem from tb_produtos_empresa pe inner join tb_lista_itens li on li.id_produto = pe.id_produto where id_lista = ?? group by pe.id_empresa, pe.id_produto3)Como você só precisa dos totais de cada empresa, pode retirar o pe.id_produto do order by. Ficando assim: select pe.id_empresa, pe.id_produto, sum(pe.produto_emp_preco * li.quantidade) as vltotalitem from tb_produtos_empresa pe inner join tb_lista_itens li on li.id_produto = pe.id_produto where id_lista = ?? group by pe.id_empresa4) Agora vamos ao que interessa. Saber quem é o menor valor select mv.id_empresa, e.empresa_nome, min(mv.vltotaempresa) as menor valor from tb_empresa e INNER JOIN (select pe.id_empresa, pe.id_produto, sum(pe.produto_emp_preco * li.quantidade) as vltotaempresa from tb_produtos_empresa pe inner join tb_lista_itens li on li.id_produto = pe.id_produto where id_lista = ?? group by pe.id_empresa) mv on mv.id_empresa = e.id_empresaPor favor teste tudo pois fiz sem testar nada.
  8. Quando eu seleciono elementos da tabela abaixo Com quais atributos eu identifico a empresa e o produto para relacionar com a tabela abaixo? Sem esta conexão é impossível saber qual empresa possui o menor total de preço.
  9. Leia este o artigo do link e vê se te serve. http://www.ehow.com.br/conectar-oracle-mysql-banco-dados-utilizando-squirrel-sql-client-como_67088/
  10. Por que não utilizar apenas um campo para data de casamento ou união, do tipo NOT NULL e para diferenciar se é um ou outro utilizar um indicador do tipo ENUM("U","C") NOT NULL, que te informará se é união ou casamento?
  11. Este assunto não está relacionado exclusivamente com MySQL. Movendo para o forum de PHP.
  12. Oi MatheusG10, Em uma generalização o registro na tabela generalizada (Pessoa, no seu caso) possuirá UMA especialização apenas. OU este registro será um cliente OU será um funcionário. Um outro ponto que estou observando em seu entendimento é o uso errado do INNER JOIN. Para o caso do select do post acima o correto seria usar o LEFT JOIN. INNER JOIN é a INTERCESSÃO entre conjuntos. Traria somente os registros que correspondessem nas tabelas relacionadas. Exemplo: Sejam os registros abaixo conforme suas tabelas: A tabela generalizada Pessoa 2 registros sendo um deles Cliente e o outro Funcionário, tal como abaixo: (1, "ZIPO PAPEIS", "C"), (2, "JOÃO", "F"); a tabela Cliente: (1, "11222333000144", "MATEUS") ; e a tabela Funcionário: (2, "GERENTE", "11122233344"); O seu select Sempre retornará um conjunto vazio.Se você aplicar o select com LEFT JOIN select t1.idpessoa, tipopessoa, nome, representante, cargo from pessoa t1 LEFT join cliente t2 on (t1.idpessoa = t2.idpessoa) LEFT join funcionario t3 on (t1.idpessoa = t3.idpessoa);O resultado será: Onde /N é nulo
  13. Reproduzindo o que diz o manual do MySQL Como números auto_increment são inteiros positivos (sem sinal), que começam em 1, então o unsigned força para que esta faixa seja
  14. Vamos arrumar esta casa: Modifique as tabelas para este formato: create table Pessoa ( IDPessoa integer unsigned not null auto_increment unique, Nome varchar(50), TipoPessoa enum('C','F') not null, constraint Pessoa_PK primary key (idpessoa) ); create table Cliente ( IDPessoa integer unsigned not null, CNPJ varchar(11), Representante varchar(20), constraint Cliente_PK primary key (IDPessoa), constraint Pessoa_Cliente_FK foreign key (IDPessoa) references Pessoa (IDPessoa) ); create table Funcionario ( IDPessoa integer unsigned not null, Cargo varchar(20), CPF integer(11), constraint Funcionario_PK primary key (IDPessoa), constraint Pessoa_Funcionario_FK foreign key (IDPessoa) references Pessoa (IDPessoa), ); Com este arranjo você estabelecerá uma relação 1:1 entre pessoa e funcionário e uma relação 1:1 entre Pessoa e Cliente.O atributo TipoPessoa em Pessoa definirá a qual tabela pertence a especialização desta generalização.
  15. Exatamente. O inner join realiza uma intercessão de conjuntos. Então, criei um subconjunto da tabela reserva, com todos os elementos com id_reserva = 18; chamei este subconjunto de r2 e provoquei a intercessão com reserva r1 para todos os id_usuario iguais. E, como estou usando os índices para os filtros, não corro o risco de um table scan.
  16. Só para completar o tópico, se a tabela reservas ficar muito grande o tipo de pesquisa acima ficará lento. Para melhorar a performance você deverá trabalhar com o filtro em outra posição. Veja abaixo: SELECT STRAIGHT_JOIN id_reserva, id_usuario, GROUP_CONCAT(id_equipamento) as id_equipamento, GROUP_CONCAT(equipamento) as equipamento FROM reserva r1 INNER JOIN reserva r2 ON r1.id_usuario = r2.id_usuario WHERE r2.id_reserva = 18 GROUP BY id_usuario
  17. Para filtrar um elemento em um GROUP use HAVING. SELECT id_usuario, GROUP_CONCAT(id_equipamento) as reservas FROM reserva GROUP BY id_usuario HAVING 18 IN GROUP_CONCAT(id_equipamento)A explicação é simples: A cláusula WHERE é executada ANTES de processar o agrupamento. A cláusula HAVING é executada APÓS o processamento do agrupamento e somente se ele existir.HAVING só existe se existir GROUP BY
  18. Não cometa este erro. coloque uma chave única para a tupla (id_usuario, id_equipamento) e tenha um registro para cada reserva. Para demosntrar a reserva do jeito que você quer use o sql abaixo: SELECT id_usuario, GROUP_CONCAT(id_equipamento) as reservas FROM reserva GROUP BY id_usuario O resultado, para o usuário 1; com a reserva dos equipamentos 2,3,4; será
  19. Pelo que entendi, você tem duas tabelas (pessoas e equipamentos) e o relacionamento entre elas deverá ser Muitos para Muitos (um equipamento pode estar reservado por várias pessoas e uma pessoa pode reservar vários equipamentos). Neste caso, reserva é a tabela de relacionamentos M:N entre pessoas e equipamentos. Seus atributos básicos devem ser: id Pessoa id Equipamento dt reserva Poderão haver outros atributos, mas dependerá do que você está planejando. A chave primária da tabela reserva é a tupla(id Pessoa, id Equipamento). Com este arranjo você conseguira solucionar os problemas que está enfrentando.
  20. Se campo Data for do tipo date, transforme-o em datetime e, no ato da gravação faça-a com data e hora ara que você possa ter as ocorrências do jeito que você quer.
  21. Somente através de programação.
  22. Indices. Aplique-os nas conexões entre tabelas (JOINS), e nos campos usados em cláusulas WHERE. Seja comedido. O excesso de índice causa tanta lentidão quanto a falta.
  23. Desculpe, esqueci um pequeno detalhe. SELECT t1.destino FROM Tabela_1 t1 LEFT JOIN Tabela_2 t2 ON t2.telefone = t1.destino WHERE t2.telefone IS NULL Agora vai.
×
×
  • Criar Novo...