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. A grosso modo podemos dizer o seguinte sobre as engines: MyISAM: Não tem controle de transação (commit automático sem rollback). Não tem integridade relacional (tabela pai pode ser detonada antes de tabela filha, deixando dados órfãos). Dados de cada tabela são guardados em tres tipos de arquivos distintos. Acesso extremamente rápido para consultas. Eu uso muito para OLAP. InnoDB: Possui controle de transação (commit pode ser automático ou manual. Você configura). Possui rollback. Possui integridade relacional (tabela pai NÃO pode ser detonada antes de tabela filha). Somente a estrutura da tabela é guardada em tabela a parte. Demais informações "dados" e "indices" são armazenados em um único arquivo. Ideal para OLTP. MEMORY: Armazenamento em memória. Igual MyISAM mas dados residem somente na RAM.´Ótimo para tabelas temporárias e dados não críticos. ARCHIVE: Não sei informar. Nunca trabalhei com este engine. Leia:http://dev.mysql.com/doc/refman/5.0/en/ http://dev.mysql.com/doc/refman/4.1/pt/what-is.html http://dev.mysql.com/doc/refman/4.1/pt/storage-engines.html http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html
  2. Correto. Mas, Já que o tipo Boolean vira automaticamente Tinyint na descrição do create table, então acostume-se a usar o tinyint.
  3. Oi '403Forbidden' Se os databases estão na mesma instancia do banco e se as tabelas ou o resultado dos selects das tabelas retornam os mesmos valores você pode usar o UNION e fazer uma única instrução select para isso. exemplo: SELECT campo1, campo2 FROM banco1.tabela1 UNION SELECT campo1, campo2 FROM banco2.tabela1
  4. Oi 'Claudio Wendt', Até onde lembro o tipo BOOL foi reservado mas ainda não foi implementado. Use os tipos ENUM, CHAR(1), ou TINYNINT(1) UNSIGNED para campos booleanos. Particularmente eu prefiro o último.
  5. Denis Courcy

    BD Multimidia

    MySQL é só o banco de dados. Para gravar e consultar de forma amigável ao usuário você necessitará de uma linguagem de programação que não é o objetivo deste forum. Como o que você que é um exercício escolar, mostre o que você tentou e te orientaremos como continuar. Não faremos o exercício pra você. Você disse que estudou sobre BD. ponha em prática o que você estudou. O site do MySQl tem manuais que informam como usá-lo.
  6. Denis Courcy

    BD Multimidia

    É muito mais fácil e prático guardar somente os dados referentes a mídia sem guardar a mídia propriamente dita no banco de dados. Por exemplo um filme. Você guardará o nome, os atores, a sinopse e o caminho de diretório onde está a mídia (neste caso o filme). Você não guardará o filme propriamente dito, por questões de performance e facilidade de manutenção do BD.
  7. Denis Courcy

    Problemas com select

    Oi Alex, Para o código apresentado você tem duas soluções: A primeira: select b.nm_elegivel from sgm_elegivel b where b.cd_elegivel IN (select cd_chefe from sgm_elegivel) A segunda:select b.nm_elegivel from sgm_elegivel b INNER JOIN sgm_elegivel c ON c.cd_chefe = b.cd_elegivel A segunda solução é mais limpa que a primeira.
  8. Oi Fábio, A questão 3 está correta. Note que ele ordenará de forma descendente a categoria e DENTRO da categoria ele ordenará de forma ascendente o valor. Nesta questão voce poderia ter usado as funções do MySQL MAX, MIN e AVG para máximo, mínimo e média, respectivamente. Segue o código:SELECT MAX(vide_30090_vlr_aluguel) AS Mais_Caro, MIN(vide_30090_vlr_aluguel) AS Mais_Barato, AVG(vide_30090_vlr_aluguel) AS Valor_Medio FROM locacao_30090 A questão 9 está dando margem a duas interpretações. Uma é trazer, dentro das categorias fornecidas no enunciado, somente os filmes que terminam com letra "a". Neste caso o select seria este:SELECT cate_30090_categoria, vide_30090_nome_filme FROM locacao_30090 WHERE cate_30090_categoria IN("comedia","infantil","suspense") AND vide_30090_nome_filme LIKE "%a" A outra interpretação é além das categorias informadas trazer, também, os filmes que terminam com a letra "a". E o código seria este:SELECT cate_30090_categoria, vide_30090_nome_filme FROM locacao_30090 WHERE cate_30090_categoria IN("comedia","infantil","suspense") OR vide_30090_nome_filme LIKE "%a" Porque você errou feio. Veja o que pede o enunciado. Em vez de colocar o nome do filme você colocou a categoria na cláusula where. O código correto é:SELECT vide_30090_nome_filme, vide_30090_vlr_aluguel FROM locacao_30090 WHERE vide_30090_nome_filme LIKE 'a%' AND vide_30090_vlr_aluguel <> '5.00'
  9. Ok. Obrigado por fornecer a estrutura das tabelas. Neste tipo de consulta você deve pensar de tras para diante. Primeiro vamos descobrir qual a consulta mais cara: SELECT id_consulta FROM consultas ORDER BY valor DESC LIMIT 1 Agora vamos listar o código e o nome de todos os materiais usados por esta consulta SELECT STRAIGHT_JOIN m.codigo, m.nome FROM materiais m INNER JOIN materiais_utilizados mu ON mu.codigo = m.codigo WHERE mu.id_consulta = (SELECT id_consulta FROM consultas ORDER BY valor DESC LIMIT 1) Creio que você poderá continuar daqui. sds
  10. Pode informar os atributos(campos) de cada tabela, para que possamos te ensinar a pensar?
  11. Oi 'leandrogs' Em anexo um pequeno modelo de como você poderia começar. artistas.pdf
  12. Oi 'Eder Lima' Você colocou WHERE NOT EXISTS (SELECT COUNT(*) ). Neste caso o COUNT(*) sempre retornará zero se não houver nenhum registro para contar. Ou seja a cláusula NOT EXISTS que pressupõe um conjunto vazio retornará falso pois o conjunto não está vazio. Está com Zero. (6º ano ensino fundamental. eheh)
  13. 'Hightfire', Não estou vendo em seu select nada que justifique o uso de um join. Não há filtro de where que justifique. O que está acontecendo é que a consulta está varrendo toda a tabela. Tenho uma pergunta para o caso de realmente ser necessário o uso do join. O campo tabela1.campo4 possui indice? se não possui, então para acada registro lido em tabela2 serão livos todos os registros de tabela1. A indexisatencia deste tipo de índice causa o "sentamento" da máquina por fazer table scan uma vez na tabela2 e diversas vezes na tabela1.
  14. Isso está com cara de dever de casa. Mostre o que você fez. Informe o que você não entendeu. No decorrer deste tópico você (e somente você) fará o exercício.
  15. Oi 'Rafael-Moran', Tente entender melhor assim: 1 cliente pode ter 0 ou muitos carrinhos, certo? 0 carrinhos porque ele acabou de fazer o cadastro e ainda não faz nenhuma compra e muitos (de 1 a infinito) serão as quantidades de compras (carrinhos) efetuados de cada vez. Então, é a tabela carrinho que deverá guardar o ID do cliente e não o inverso como você fez. Em tese, sua lógica ficará assim: Quando um cliente faz um cadastro, ele não tem a obrigatoriedade de fazer uma compra inicial. Os dados do cliente são os que caracterizam o cliente como pessoa. Então somente a tabela cliente é gravada Quando o cliente vai fazer uma compra, ele "pega" um carrinho (quer dizer que cada compra gravada na tabela carrinho conterá o id do cliente) Quando você for fechar a compra do carrinho, deverá somar todos os valores daquele cliente. É isso. Se você tiver mais dúvidas poste-as aqui.
  16. Tente assim:SELECT Producao, Consumo FROM(SELECT 1 as x, sum (PRODUCAO.QTDPRODUZIDA) as Producao from PRODUCAO inner JOIN VACA on (EXTRACT (year from PRODUCAO.DATAPRODUCAO) = 2010 and (PRODUCAO.CODVACA = VACA.CODVACA) and (VACA.CODVACA = 3))) a INNER JOIN (SELECT 1 as y, sum (CONSUMO.QTDCONSUMIDA) as Consumo from CONSUMO inner join VACA on (EXTRACT (YEAR from CONSUMO.DATACONSUMO) = 2010 and (CONSUMO.CODVACA = VACA.CODVACA) and (VACA.CODVACA = 3))) b ON a.x = b.x
  17. Oi 'Zek' É isso que você quer? SELECT DISTINCT A.`codAnuncio`,A.`tituloAnuncio`, A.`imgAnuncio`, GROUP_CONCAT(D.`nmCatPadrao` ) FROM `tbanuncio` AS A LEFT JOIN `tbrecomendanuncio` AS B ON B.`FK_Anuncio_RA` = A.`codAnuncio` INNER JOIN `tbcategoriaanuncio` AS C ON C.`FK_Anuncio_CA` = A.`codAnuncio` INNER JOIN `tbcategoriapadrao` AS D ON D.`codCatPadrao` = C.`FK_CatPd_CA` WHERE A.`statusAnuncio` = 2 AND A.`statusFree` = 2 AND A.`codEntrega` = 1 GROUP BY A.`FK_CatGeral_A`, A.`codAnuncio`, B.`FK_Anuncio_RA` ORDER BY A.`codAnuncio` ASC;
  18. Status e release são palavras reservadas do MySQL. Para usá-las como nomes de tabelas e ou atributos você deve escrevê-las entre crases.
  19. Fazer tabelas repetitivas não é uma boa escolha. logo logo você terá problemas se quiser ver vários períodos que estarão em tabelas diferentes. Crie um indice pela data e depois pelos campos que você quer filtrar. Você ganhará velocidade. Meus clientes tem mais de 1000 inputs dia e eles conseguem buscar relatórios de periodos diversos em pouco tempo.
  20. Se você leu o post anterior então a resposta é sim. existe versão paga. Use ferramentas do próprio mysql para fazer grandes manutenções no banco..
  21. Denis Courcy

    Usar a funcao Count

    Faça assim SELECT l.id_func, f.func_nome, COUNT (l.id_func) AS QTD_ACESSOS, d.dep_nome FROM logs l INNER JOIN funcionario f ON f.id_func = l.id_func INNER JOIN departamento d ON d.id_departamento = l.id_departamento GROUP BY l.id_func
  22. Faça assim: SELECT DISTINCT c.mID AS filme, cmax.estrelas AS Classificacao_maxima, cmin.estrelas AS Classificacao_minima, (cmax.estrelas - cmin.estrelas) AS Diferenca FROM classificacao c INNER JOIN (SELECT cma.mID, MAX(cma.estrelas) AS estrelas FROM classificacao cma GROUP BY cma.mID) cmax ON cmax.mID = c.mID INNER JOIN (SELECT cmi.mID, MIN(cmi.estrelas) AS estrelas FROM classificacao cmi GROUP BY cmi.mID) cmin ON cmin.mID = c.mID ORDER BY diferenca DESC, filme ASC; Acrescente os joins com o nome do filme. Não há a necessidade de mostrar o revisor pois o enunciado só pede o nome do filme e a classificação. Em meu exemplo mostrei a maior e a menor classificação. Também não é necessário mostrá-los. Estude o exemplo e questione em caso de dúvidas. Para os espertinhos de plantão: Só coloquei código porque o 'thiagogoiis' fez a parte dele no exercício e mostrou até onde ele conseguiu chegar. 'thiagogoiis' , para que seu entendimento seja rápido aqui vai mais uma dica: Todo o resultado de uma query (um select) é uma tabela virtual.
  23. Denis Courcy

    Iniciante

    Oi Thiago, Respondendo suas perguntas: a tarefa não é difícil. É trabalhosa. Eu montei uma aplicação e um banco de dados. O algorítimo que criptografa e descriptografa os dados está na aplicação. Não é possível acessar o banco sem a aplicação. Sim. Eles tem um contrato de horas de manutenção. E sim, existe uma renovação anual. Posso indicar um livro mas você deverá estudar uma linguagem de programação, também. Sistemas de Banco de Dados, 4ª ed., de Elmasri, Ranmez e Navathe, Shamkant B. Este livro vai te dar a teoria do funcionamento de qualquer banco de dados. Mas pelo que percebi de suas perguntas você deverá procurar, além deste livro, algo mais direto e voltado para o desenvolvimento de uma aplicação exemplo que rode com um BD.
  24. Denis Courcy

    Usar a funcao Count

    'tlima' Para ficar claro a resposta Analisei seus posts anteriores. Você postou na área de SQL Server um post identico a este e não teve resposta e você postou na área de PHP, sobre outro assunto, e Obteve resposta. Aqui na área de MySQL você está postando somente agora e estou respondendo. Mas, acho que ainda não acordei, pois devo estar pensando lento ou ainda não adquiri os poderes do prof. Xavier. :D Qual o objetivo de sua sonsulta? O que você quer que ela retorne? O uso da função de agregação COUNT requer o uso da cláusula GROUP BY em sua consulta.
×
×
  • Criar Novo...