Ir para conteúdo

POWERED BY:

Arquivado

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

NeNeM_BsP

[Resolvido] SQL Retornando valores errados

Recommended Posts

Galera nao postei no mesmo topico atraz pq esse erro eu nunca vii seguinte

 

Eu to fazendo um SELECT em duas tabelas diferentes como o go back me explicou

 

usando

 

Select * From Cadastro
INNER JOIN Perfil ON Perfil.ID_Cliente = Cadastro.ID

 

só que fazendo esse select o sql ta retornando as informações erradas

 

fazendo o select de uma unica tabela ele retorna o nome sobrenome e o pais de cada user perfeitamente

mais fazendo esse select ai de cima pra buscar em duas tabelas ele em vezes de buscar o ID da session ele busca o ID de baixo

 

exemplo

 

o numero ID 1 se chama Felipe Souza e o ID 2 se chama Gustavo Lisboua

 

quando eu logo com o GUSTAVO ele aparece as informações certas do gustavo mais quando logo com o felipe ele aparece as informações do do gustavo

traduzindo quando eu logo com o ID 1 ele mostra as informações do ID 2 :s

 

alguem sabe resolver esse problema ?

 

des de ja agradeço :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

não use o *, especifique quais campos de qual tabela você quer buscar.

 

SELECT Cadastro.Data, Perfil.ID_Cliente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse codigo ta errado era só um exemplo vo postar o meu

 

 

esse codigo

 

$sql = "SELECT * FROM cadastro WHERE id = '$id'";

 

funciona perfeitamente

 

mais quando eu tento usar o que o GO Back me passou

$sql = "Select * From cadastro
INNER JOIN perfil ON perfil.ID = cadastro.id";

 

ele da esse erro mauco

 

e uma coisa que eu observei é que quando eu logo com qualquer usuario do meu banco de dados ele aparece com as informações do ultimo cadastrado.

 

com esse codigo acima q o go back tentou me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

exporte as duas tabelas e poste aqui para análise.

acredito que você esteja fazendo errado o relacionamento, pelo campo errado.

 

porém considere a minha dica do post anterior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tablea perfil

-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
-- 
-- Servidor: localhost
-- Tempo de Geração: Fev 03, 2011 as 07:00 PM
-- Versão do Servidor: 5.0.45
-- Versão do PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Banco de Dados: `star`
-- 

-- --------------------------------------------------------

-- 
-- Estrutura da tabela `perfil`
-- 

CREATE TABLE `perfil` (
 `id` int(10) NOT NULL auto_increment,
 `quem_eu_sou` varchar(255) NOT NULL,
 `humor` varchar(255) NOT NULL,
 `MSN` varchar(255) NOT NULL,
 `orkut` text NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

-- 
-- Extraindo dados da tabela `perfil`
-- 

INSERT INTO `perfil` (`id`, `quem_eu_sou`, `humor`, `MSN`, `orkut`) VALUES 
(3, '', 'Feliz', '', '', '', '', '', '', '', '', '', ''),
(4, '', 'Feliz', '', '', '', '', '', '', '', '', '', ''),
(5, '', 'Triste', '', '', '', '', '', '', '', '', '', '');

 

 

 

 

Tabela cadastro

 

-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
-- 
-- Servidor: localhost
-- Tempo de Geração: Fev 03, 2011 as 06:58 PM
-- Versão do Servidor: 5.0.45
-- Versão do PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Banco de Dados: `star`
-- 

-- --------------------------------------------------------

-- 
-- Estrutura da tabela `cadastro`
-- 

CREATE TABLE `cadastro` (
 `id` int(11) NOT NULL auto_increment,
 `nome` varchar(255) NOT NULL,
 `sobrenome` varchar(255) NOT NULL,
 `senha` varchar(255) NOT NULL,
 `email` varchar(255) NOT NULL,
 `cidade` varchar(255) NOT NULL,
 `estado` varchar(255) NOT NULL,
 `pais` varchar(255) NOT NULL,
 `sexo` varchar(255) NOT NULL,
 `nascimento_dia` varchar(255) NOT NULL,
 `nascimento_mes` varchar(255) NOT NULL,
 `nascimento_ano` varchar(255) NOT NULL,
 `data` date NOT NULL,
 `avt` varchar(255) NOT NULL,
 `cache` varchar(255) NOT NULL,
 `cor` varchar(255) NOT NULL,
 `cortitulos` varchar(255) NOT NULL,
 `corbarras` varchar(255) NOT NULL,
 PRIMARY KEY  (`id`),
 UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

-- 
-- Extraindo dados da tabela `cadastro`
-- 

INSERT INTO `cadastro` (`id`, `nome`, `sobrenome`, `senha`, `email`, `cidade`, `estado`, `pais`, `sexo`, `nascimento_dia`, `nascimento_mes`, `nascimento_ano`, `data`, `avt`, `cache`, `cor`, `cortitulos`, `corbarras`) VALUES 
(4, 'Weverton', 'F.', '123', 'bspdesigner@gmail.com', 'Rio de Janeiro', 'RJ', 'Brazil', 'Masculino', '9', 'Fevereiro', '1986', '0000-00-00', 'avt/sf.png', '', '#DFEAF8', '', ''),
(5, 'Talita', 'Gomes', '123', 'aa@gmail.com', 'Rio de Janeiro', 'Sul', 'Brazil', 'Feminino', '13', 'Dezembro', '1998', '0000-00-00', 'avt/sf.png', '', '#DFEAF8', '', '');

Compartilhar este post


Link para o post
Compartilhar em outros sites

e qual é o campo que deveria ligar uma tabela na outra?

 

a 'chave estrangeira' ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

uê cara.. imagina assim, você tem uma tabela com relação 1:1

 

estude modelagem SQL.

 

TABLE categoria

id, nome

 

TABLE produto

id, id_categoria, nome, preco

 

 

`produto`.`id_categoria` é a minha chave estrangeira.

o meu JOIN ficaria: ... JOIN categoria ON categoria.id = produdo.id_categoria

 

entendeu ?

por essa minha modelagem, cada produto só está relacionado a uma unica categoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parei olhei sua explicação entendi tentei criar um campo com valor inteiro com o nome

 

cod_u

 

ai fiz o JOIN no php

 

$sql = "SELECT * FROM cadastro
INNER JOIN perfil ON cadastro.id = perfil.cod_u";

 

mais assim ele só retorna o valor da tabela cadastro e nao aparece os valores da tabela perfil

 

mais alguma ideaa :ermm:

Compartilhar este post


Link para o post
Compartilhar em outros sites

e você colocou os valores na coluna perfil.cod_u ?

 

agora faça oque eu disse lá em cima.

não use o *, e especifique os campos que você quer.

 

caso tenha 2 campos 'com mesmo nome', dê um ALIAS para um deles. (pesquise)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei outra tabela de perfil com um campo chamado ligar adicionei a chave estrangeira em ligar depoix de muito estudar aki e to usando o INNER JOIN como vcs me mostraram e continua o mesmo erro por causa do INNER JOIN todos os usuarios que logam tem as informações iguais as do ultimo cadastrado ja to ficando maluco com isso to des de 7 horas da manhã tentando resolver esse problema e ja saum 9 e 20 da noite..

 

alguem pode tentar me dar mais uma ajuda de como dar um select em duas tabelas

 

muito obrigado William por tentar me ajudar fera :(

Compartilhar este post


Link para o post
Compartilhar em outros sites
todos os usuarios que logam tem as informações iguais as do ultimo cadastrado

está me parecendo que o teu erro é em outro lugar, e não no INNER JOIN.

mostre como você faz a consulta para saber os dados do usuario.

 

Está usando um WHERE ne?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigao consegui resolver meu problema fuçando e inventando codigos que no caso ja existem mais eu desconhecia..

realmente o meu problema era no INNER JOIN e eu to usando o WHERE

 

resolvi meu problema assim olha com esses codigos q tentei inventar

 

<?php

$sql = "SELECT * FROM cadastro INNER JOIN perfil ON cadastro.id = ligar WHERE cadastro.id = '$id'";
$rt = mysql_query($sql) or die(mysql_error());
while($l=mysql_fetch_array($rt)){

$nome = $l['nome'];
$sobrenome = $l['sobrenome'];
$pais = $l['pais'];
$humor = $l['humor'];
}
?>

 

muito obrigado meu amigo só tu mesmo pra me dar essa atenção qualquer coisa estamos ai só mandar uma MP.. abraçOs e Boa noite

 

:clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

parabéns por ter resolvido.. ainda assim, não entendi onde você tava errado.. hehe

 

então cara.. esse select só vai trazer sempre uma unica linha ne?!

então neste caso (select que retorna uma unica linha), você não precisa do loop.

 

podendo trocar:

while($l=mysql_fetch_array($rt)){

$nome = $l['nome'];
$sobrenome = $l['sobrenome'];
$pais = $l['pais'];
$humor = $l['humor'];
}

por:

$l=mysql_fetch_assoc($rt);//o _assoc() terá melhor performance, já que você só usa o retorno associativo.

$nome = $l['nome'];
$sobrenome = $l['sobrenome'];
$pais = $l['pais'];
$humor = $l['humor'];

ainda assim, geralmente é desnecessária essa atribuição na maioria dos casos.

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.