Ir para conteúdo

POWERED BY:

Arquivado

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

gguimaraes

unique key

Recommended Posts

Estou com um problema:

 

quero pegar todos os campos da minha tabela no banco de dados (MySQL) e verificar quais são chaves únicas (unique key). Quando tenho apenas um campo como chave única, não tem problema. O problema é quando tento pegar de uma tabela que tem mais de uma chave única.

 

No início fiquei com dúvida se era possível ter mais de uma chave única, mas o phpmyadmin reconhece e aceita isso. Tanto é que os campos de chave única que criei foram através do próprio phpmyadmin. Quando vejo a estrutura da tabela, ela mostra todos os campos que são primários, únicos, index, etc...

 

Usei a função mysql_fetch_field. Vou colocar abaixo o código que usei pra ilustrar melhor o que está sendo feito.

 

while ($n < mysql_num_fields($resultado)){   $meta = mysql_fetch_field($resultado,$n);      echo "<pre>name:		 $meta->namemax_length:   $meta->max_lengthmultiple_key: $meta->multiple_keynot_null:	 $meta->not_nullprimary_key:  $meta->primary_keytable:		$meta->tableunique_key:   $meta->unique_key</pre>";   }   $n++;}
Já tentei utilizar multiple_key, mas não deu certo.

 

Só pra deixar claro: não estou falando de chave primária (PRIMARY KEY), estou falando de chave única (UNIQUE KEY).

Alguém sabe como resolver este problema?

 

 

Agradeço a ajuda. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aê Fábio, tudo beleza?Cara, desta forma não deu certo. Ele retorna os campos da mesma forma que eu tinha descrito antes.Deixa eu tentar explicar colocando um exemplo.Uma tabela tem, por exemplo, 4 campos. O primeiro é ID, o segundo NOME, o terceiro MATRICULA e o quarto TELEFONE. Digamos que o campo ID seja primário, os campos NOME e MATRICULA sejam únicos e o telefone não tem muita importância.O que eu preciso saber é QUAIS campos são chave única.Da forma como eu tinha colocado e da maneira que você sugeriu, ele diz que NOME é chave multipla, mas não indica qual o outro campo que também é chave. Quando utilizo o DESC tabela, também mostra a mesma coisa.Tem como saber quais campos fazem parte da chave multipla?Valeu pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

vou colocar o código que fiz aqui como teste e o resultado que obtive.

 

Para criar a tabela:

 

CREATE TABLE `teste` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`nome` VARCHAR( 15 ) NOT NULL ,`matricula` VARCHAR( 10 ) NULL ,`telefone` VARCHAR( 10 ) NULL ,UNIQUE (`nome` ,`matricula` )) TYPE = MYISAM;

O código PHP pra mostrar os resultados:

 

<?mysql_connect("localhost", "", "");mysql_select_db("test");$result = mysql_query("SHOW FIELDS FROM teste");while ($row = mysql_fetch_assoc($result)){  echo "<pre>";  print_r($row);  echo "</pre>";}?>

O resultado:

 

Array(	[Field] => id	[Type] => int(11)	[Null] =>	[Key] => PRI	[Default] =>	[Extra] => auto_increment)Array(	[Field] => nome	[Type] => varchar(15)	[Null] =>	[Key] => MUL	[Default] =>	[Extra] =>)Array(	[Field] => matricula	[Type] => varchar(10)	[Null] => YES	[Key] =>	[Default] =>	[Extra] =>)Array(	[Field] => telefone	[Type] => varchar(10)	[Null] => YES	[Key] =>	[Default] =>	[Extra] =>)

Vê se você acha algum erro e me avisa.

 

Valeu de novo pela ajuda. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é bem isso.Na verdade tenho duas tabelas no banco com a mesma estrutura e preciso fazer um CHECK entre elas para verificar os valores que são diferentes.O problema é que são quase 40 tabelas para verificar. Então fiz um código em PHP que verifica qualquer tabela, independente de quanto campos e registros tenha.As tabelas com apenas 1 chave única funcionou, mas as que têm mais de uma não estavam funcionando. Quando fui "debugar" pra saber o que estava acontecendo, vi que esta função para retornar as chaves únicas não estava funcionando. Foi aí que surgiu o problema.Bom, vou continuar procurando uma solução. Se achar alguma coisa, coloco o resultado aqui.Caso você tenha alguma solução alternativa, agradeço mais uma vez.Valeu....

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.