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.
Selecionar Itens Diferentes Em Tabelas Diferentes
Started By INFOSOFT, 02/05/2012, 21:28
6 replies to this topic
#1
Posted 02/05/2012, 21:28
#2
Posted 03/05/2012, 07:43
Poste aqui a estrutura do banco de dados.
Meu post lhe ajudou? Clicar no é uma das formas de agradecer.
#3
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
Então agradeça é rapido, prático e gratuito
#4
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 ;
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
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.
Ai em serviços você usa o ID do usuário para fazer as movimentações.
Meu post lhe ajudou? Clicar no é uma das formas de agradecer.
#6
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
Então agradeça é rapido, prático e gratuito
#7
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!
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!
--------------------
-- 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!
--------------------
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)