Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

Mini Tutorial de Mysql

Recommended Posts

E para deletar os dados?

 

Estava tentando assim:

 

$usuarios = $_POST["deletar"];if ($usuarios){ $auxsql = "DELETE users_subcateg.*, users_categ.*FROM ((users_subcateg INNER JOIN subcateg ON users_subcateg.subcateg_id = subcateg.subcateg_id) INNER JOIN new_users ON users_subcateg.users_id = new_users.users_id) INNER JOIN categoria ON subcateg.subcateg_id_categ = categoria.categ_id WHERE users_subcateg.users_id IN (".implode(",", $usuarios).")";

Retorna o seguinte erro:

 

Not unique table/alias: 'users_categ'

 

Imagino que seja porque tenho campos users_id e campo categ_id da tabela users_categ, que são ligados a mais de um campo subcateg_id

 

assim:

user1 > categ1 > subcateg1, subcateg2...

user2 > categ1 > subcateg5, subcateg7...

 

Então, não posso apagar o subcateg1 > categ1 do user 1, senão apago tudo que tiver ligado àquela categoria, certo?

 

Se eu tiro o "users_categ.*" da primeira linha:

 

$auxsql = "DELETE users_subcateg.* FROM...

 

Ele apaga todos os campos daquele user, no subcateg e, claro, nenhum do categ.

 

O que eu preciso mudar pra apagar somente a categoria com a subcategoria selecionada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu preciso mudar pra apagar somente a categoria com a subcategoria selecionada?

 

Depende pois se você apagar uma categoria, você precisa pagar todas as sub categorias relacionadas a ela

e tbm apagar o que o usuario escolheu, seria melhor você usar um efeito cascata, mas só funciona com Mysql 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende pois se você apagar uma categoria, você precisa pagar todas as sub categorias relacionadas a elae tbm apagar o que o usuario escolheu, seria melhor você usar um efeito cascata, mas só funciona com Mysql 5

Pois é... mas a questão é que tenho que apagar a subcateg.Então, não posso apagar a categoria enquanto tiver uma sucateg vinculada a ela. Mas como vou saber se a subcateg que estou apagando é a última subcateg da categ ou ainda existem outras?Não acredito que seja através de SELECT (count) e IF's. Deve ter uma maneira mas fácil. ou não??

Compartilhar este post


Link para o post
Compartilhar em outros sites

só apagar todas as sub categorias onde o id da categoria seja igual a id categoria que você quer apagar

Pois é, mas se o user escolhe só uma subcateg pra deletar, ficando outras daquela categoria, não dá pra apagar a categ ainda. Só quando a subcateg for a última escolhida. Eu acho que tem que ser alguma coisa assim.seleciona a categoria da subcateg escolhida na tabela categoria. (AQUI SEM PROBLEMA).verifica quantas subcateg dessa categ selecionada estão na tab users_subcateg. (AQUI COMPLICA. COMO FAÇO ESSA VERIFICAÇÃO?)O problema aqui é que essa tabela (users_subcateg) é de junção. Só tem os campos users_id e subcateg_id. Não tem campo categ_id. Será que vou ter que acrescentar este campo? Aí vai ficar fácil, mas correto?Se a subcateg for a última, deleta a categ da users_categ.Então, se for assim, a dúvida é fazer a comparação entre as tabelas pra ver se a subcateg, daquela categoria, é a última.você pode dar uma luz de como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

como falei se você usar o efeito cascata ira apagr tudo relacionado ao id categoria , mas da para fazer na mao tbm, se você quer apagar uma categoria sinal que tbm quer apagar as subcategoria claro.

 

dai é simples se quer apagar a categoria, e apagar todas as sub categoria onde for igual a id categoria, e depois apagar na tabela de junção onde id categoria for igual

 

como falei na mao tbm da mas fica mais facil e mais correto se usar o cascade, mas é claro se for mysql 5 e nao sei qual é sua versao do mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

como falei se você usar o efeito cascata ira apagr tudo relacionado ao id categoria , mas da para fazer na mao tbm, se você quer apagar uma categoria sinal que tbm quer apagar as subcategoria claro.

 

dai é simples se quer apagar a categoria, e apagar todas as sub categoria onde for igual a id categoria, e depois apagar na tabela de junção onde id categoria for igual

 

como falei na mao tbm da mas fica mais facil e mais correto se usar o cascade, mas é claro se for mysql 5 e nao sei qual é sua versao do mysql

A versão do mysql do servidor é 4. alguma coisa.

 

Acho que não fui claro. Na verdade não quero apagar a categoria nem a subcategoria. Só quero deletar a subcategoria escolhida pelo usuário e que fica gravada na tabela de junção users_subcateg. O problema é qdo for deletar a última subcategoria de uma determinada categoria, tenho que deletar a categoria da tabela de junção users_categ também.

 

Tudo isso, mantendo as categorias e subcategorias nas suas tabelas originais. Tenho que deletar apenas nas tabelas de junção com o usuário.

 

Usando teu exemplo (e aumentando uma "escolha"), seria assim:

 

Usuario Fabyo torce em São Paulo para o Sao Paulo

Usuario Fabyo torce em Rio de Janeiro para Flamengo e Fluminense

Usuario Adailton torce em São Paulo para o Sao Paulo

Usuario Adailton torce em Rio de Janeiro para Flamengo

 

Fabyo descobre que torcer no Rio para Flamengo e Fluminense não dá certo, então decide apagar Fluminense: (Aqui tenho que apagar Fluminense mas não Rio de Janeiro.)

 

Usuario Fabyo torce em São Paulo para o Sao Paulo

Usuario Fabyo torce em Rio de Janeiro para Flamengo

Usuario Adailton torce em São Paulo para o Sao Paulo

Usuario Adailton torce em Rio de Janeiro para Flamengo

 

Fabyo fica p. com Flamengo e não quer mais torcer pra nenhum time do Rio:

(Já aqui tenho que apagar Flamengo e Rio de Janeiro, mas não posso apagar Flamengo, nem Fluminense, nem Rio de Janeiro de suas próprias tabelas pois tem outros usuários que torcem pra esses times, ou vão torcer. Se não apagar Rio de Janeiro vai ficar:)

 

Usuario Fabyo torce em São Paulo para o Sao Paulo

Usuario Fabyo torce em Rio de Janeiro para

Usuario Adailton torce em São Paulo para o Sao Paulo

Usuario Adailton torce em Rio de Janeiro para Flamengo

 

Tentei fazer um delete do tipo:

 

"DELETE users_subcateg, users_categ FROM users_subcateg, users_categ WHERE subcateg_id = $apagar";
Mas claro não deu certo pois apagou todos os registros de users_categ, inclusive de outros usuários. Então, tenho que passar um parâmetro pro users_categ mas não imagino qual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi dos testes que eu fiz, acho que a questão tá na modelagem das tabelas. A tabela de junção users_categ não precisa, pois subcateg já está ligado a categoria.Então ficou assim:tab categoriatab subcategoriatab userstab users_subcategVou testar mais um pouco mas parece que assim tá funcionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo......uma pergunta.......primeiramente, desculpe-me, pois nao pude ler o POST todo......mas ai vai a pergunta:Se eu tenho uma tabela nomeada SEGURO, com id e outros campos.Tenho uma tabela DADOS PESSOAIS relacionada a SEGURO, e outras duas, DADOS CONJUGE e DADOS BANCARIOS, todas relacionadas à tabela SEGURO....Qual seria a melhor maneira de JUNTAR essas tabelas? criando uma tabela intermediária, que grava o id de cada uma, relacionando ao do SEGURO, ou uma FK em cada uma das tabelas filhas, relacionadas ao ID da SEGURO???e outra dúvida:ao inserir um novo dado, há como inserir automaticamente o valor de cada id relacionado ao FK, ou preciso inserir o id da SEGURO em cada tabela????assim:ao inserir um seguro, gravo tudo junto, os dados pessoais, conjuge e bancarios, tudo de uma única vez.......mas pra gravar, preciso inserir o ID desse formulario em cada tabela???Grato pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo......mas os dados são muitos, isso nao atrapalha???se for colocar tudo junto, gera cerca de 90 campos.......não é muito pra uma única tabela???E continuando........caso eu gere uma unica tabela para elas......e crie um FK do seguro.....como eu gero isso?ou seja, na gravação, eu gravo o id do seguro nas duas? ou é automatico......

Compartilhar este post


Link para o post
Compartilhar em outros sites

sobre muitos campos é relativo, porque uma tabela tem que ter dados referente a ela, se todos os dados sao dela nao tem problema, por exemplo uma tabela de funcionarios pode ter nome, end, documentos, escolaridade etc...

só que tudo é reverente ao funcionario dai fica junto, eu por exemplo tenho uma tabela de funcionarios com 40 campos, eu nao vou separar só porque tem muitos campos, eu devo separar quando os dados nao sao reverentes ao funcionario, regras FN

 

e na gravação pode ser automatico depende da sua programação pra isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente, eu sou novo em MySql, porém ja fiz algumas coisinhas em SQL Server, e pelo que eu sei, o INNER JOIN serve apenas para consulta SQL, não é?Para fazer um relacionamento temos que usar o REFERENCES, certo?Ou o REFERENCES não funciona em MySql?Por Exemplo:

alter table pedidos add foreign key (cod_cliente) references clientes(codigo);

Não seria isso para relacionar as tabelas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce esta confundindo tudo, sintaxe SQL é basicamente igual em qualquer banco nao importa se é Mysql ou SQL Server

vai funcionar , e para fazer consultas relacionadas pode usar o inner join mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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