Jump to content


Photo

Selecionar Itens Diferentes Em Tabelas Diferentes


  • Faça o login para participar
6 replies to this topic

#1 INFOSOFT

INFOSOFT

    Turista

  • Usuários
  • 47 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/05/2012, 21:28

Olá pessoal... Peço ajuda de vocês para achar uma solução para este problema que descreverei abaixo:
Tenho duas tabelas, cadastro_perfil, cujo key é o login de usuário e servicos, cujo a key é um id,
em cadastro_perfil não entrar login repetido, claro, pois é uma key e em servicos não entra id repetido (...)
mas toda vez que um login cadastra um novo serviço seu nome se repete na table servicos e aí gera um novo id para o login repetido (...)
No cadastro perfil tem a coluna cidade (eu preciso dela)
No servicos tem a coluna id (eu preciso dela)
Quando o usuario vai cadastrar um novo serviço, nesta página já aparece o nome de seu login (aqui não tem problema, já que o usuario está logado)
MAS EU PRECISO QUE APAREÇA NESTA PÁGINA O ID ANTERIOR ESTE SERVIÇO QUE VAI SER CADASTRADO E O NOME DA CIDADE DESTE USUÁRIO (é aqui que dá pau!)
Eu tentei algumas query que, mostra o id certo e a cidade de outro usuário OU a cidade certa e o id 1.
---- tentei assim ----
$city = mysql_query("SELECT * FROM cadastro_perfil INNER JOIN servicos.id=cadastro_perfil.cidade");
OU
$city = mysql_query("SELECT cidade FROM cadastro_perfil UNION id FROM servicos");
OU
$city = mysql_query("SELECT cadastro_perfil.cidade, servicos.id FROM cadastro_perfil INNER JOIN servicos ON cadastro_perfil.login = servicos.login AND login='$login'");
OU
$city = mysql_query("SELECT * FROM cadastro_perfil AS cidade, servicos AS id WHERE cidade='$cidade' AND id='$id'");

while ($coluna = mysql_fetch_array($city)){
$cidade = $coluna["cidade"];
$id = $coluna["id"];
}

Estes exemplos que postei agora, mostra a cidade certa, mas o id é sempre 1
---------------------------------
Agradeço e aguardo por quem possa me dar este help.

#2 Allex Severino

Allex Severino

    Será?!?!?!

  • Usuários
  • 793 posts
  • Sexo:Masculino
  • Localidade:São Luís de Montes Belos - GO

Posted 03/05/2012, 07:43

Poste aqui a estrutura do banco de dados.
Meu post lhe ajudou? Clicar no Posted Image é uma das formas de agradecer.

#3 André Luís Otto

André Luís Otto

    Turista

  • Usuários
  • 47 posts
  • Sexo:Masculino
  • Localidade:Blumenau

Posted 03/05/2012, 11:07

coloca a estrutura do banco como banco como nosso amigo informou anteriormente para podermos te ajudar melhor
Te ajudei de alguma forma??
Então agradeça é rapido, prático e gratuito

#4 INFOSOFT

INFOSOFT

    Turista

  • Usuários
  • 47 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 03/05/2012, 22:44

Obrigado por se interessar.

CREATE TABLE `cadastro_perfil` (
`login` varchar(255) collate latin1_general_ci NOT NULL,
`nome` varchar(255) collate latin1_general_ci NOT NULL,
`cidade` varchar(255) collate latin1_general_ci NOT NULL,
`estado` varchar(2) collate latin1_general_ci NOT NULL,
`cep` varchar(9) collate latin1_general_ci NOT NULL,
`nasc` varchar(10) collate latin1_general_ci NOT NULL,
`ano_atual` varchar(10) collate latin1_general_ci NOT NULL,
`profissional` text collate latin1_general_ci NOT NULL,
`data` varchar(10) collate latin1_general_ci NOT NULL,
`hora` varchar(8) collate latin1_general_ci NOT NULL,
`foto` varchar(255) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

CREATE TABLE `servicos` (
`id` int(255) NOT NULL auto_increment,
`coduser` varchar(255) collate latin1_general_ci NOT NULL,
`login` varchar(255) collate latin1_general_ci NOT NULL,
`categoria` varchar(255) collate latin1_general_ci NOT NULL,
`publicar` varchar(3) collate latin1_general_ci NOT NULL default '0',
`titulo` varchar(255) collate latin1_general_ci NOT NULL,
`prazo` varchar(2) collate latin1_general_ci NOT NULL,
`valor` varchar(10) collate latin1_general_ci NOT NULL,
`servico` text collate latin1_general_ci NOT NULL,
`busca` varchar(255) collate latin1_general_ci NOT NULL,
`photo` varchar(255) collate latin1_general_ci NOT NULL,
`cidade` varchar(255) collate latin1_general_ci NOT NULL,
`data` varchar(10) collate latin1_general_ci NOT NULL,
`hora` varchar(8) collate latin1_general_ci NOT NULL,
`user` varchar(255) collate latin1_general_ci NOT NULL,
`mail` varchar(255) collate latin1_general_ci NOT NULL,
`comment` text collate latin1_general_ci NOT NULL,
`avatar` varchar(255) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=8 ;

#5 Allex Severino

Allex Severino

    Será?!?!?!

  • Usuários
  • 793 posts
  • Sexo:Masculino
  • Localidade:São Luís de Montes Belos - GO

Posted 04/05/2012, 08:13

Para efetuar o INNER JOIN você vai precisar ligar as tabelas (isso geralmente é feito por id). Se você não quiser nome repetido, você pode ter um ID para login. Desde que antes de fazer o INSERT você faça uma pesquisa no seu banco para ver se existe algum dado igual. Se existir informa que já existe um login igual, senão, continua o cadastro.
Ai em serviços você usa o ID do usuário para fazer as movimentações.
Meu post lhe ajudou? Clicar no Posted Image é uma das formas de agradecer.

#6 André Luís Otto

André Luís Otto

    Turista

  • Usuários
  • 47 posts
  • Sexo:Masculino
  • Localidade:Blumenau

Posted 04/05/2012, 08:58

no caso em especifico do inner join é interessante que seja feito em um campo integer até mesmo por performace
Te ajudei de alguma forma??
Então agradeça é rapido, prático e gratuito

#7 INFOSOFT

INFOSOFT

    Turista

  • Usuários
  • 47 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 04/05/2012, 16:53

NÃO POSSO USAR ID KEY EM 'CADASTRO_PERFIL', POIS ELA DEPENDE DE OUTRA TABLE 'CADASTRO_USUARIOS' QUE TEM UMA ID KEY:
-- Estrutura da tabela `cadastro_usuarios`
--

CREATE TABLE `cadastro_usuarios` (
`id` int(255) NOT NULL auto_increment,
`login` varchar(255) collate latin1_general_ci NOT NULL,
`senha` varchar(255) collate latin1_general_ci NOT NULL,
`email` varchar(255) collate latin1_general_ci NOT NULL,
`data` varchar(10) collate latin1_general_ci NOT NULL,
`hora` varchar(10) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=13 ;
-------------------------------
O usuário se cadastra em 'cadastro_usuarios' e preenche perfil completo em 'cadastro_perfil'
A table 'servicos' armazena quantidades ilimitadas de serviços destes usuários usando o LOGIN KEY de 'cadastro_perfil'
PORTANTO O INNER JOIN TORNA-SE INVIÁVEL.
Obrigado pela atenção!

no caso em especifico do inner join é interessante que seja feito em um campo integer até mesmo por performace

---------------------
André, eu poderia criar um campo integer em 'cadastro_perfil' com a estrutura do jeito que se encontra?
Isso não afetaria o database?
Obrigado!

---- RESOLVIDO -----
Peço ao moderador para fechar este tópico e agradeço pela boa vontade Allex e André.
A SOLUÇÃO É:
Retirar a linha: $cidade = $coluna["cidade"];
Muito obrigado!
--------------------




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq