Jump to content


Photo

Dúvida Com Select Em 2 Tabelas


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

#1 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 16/08/2008, 11:23

Bom dia Galera!!

Venho eu novamente pedir ajuda de vocês. Procurei no fórum e no santo google, mais não achei nada parecido com o que quero, e é a primeira vez que uso select de 2 tabelas. vamos lá.


Meu banco é composto do seguinte:
Aqui fica os Avisos:
TABLE avisos (
  id int(11),
  titulo varchar(200),
  descricao text,
  data varchar(10),
  foto char(1),
  legenda varchar(200),
  autor varchar(200),
  PRIMARY KEY (id)
)

Aqui é a conexão dos Avisos com Usuários - PK Composta
TABLE usuario_avisos (
  id int(11),
  usuario int(11),
  aviso int(11),
  lido int(11),
  PRIMARY KEY  (id,usuario,aviso),
  KEY usuario (usuario),
  KEY aviso (aviso)
)

Meu banco possuí 2 tabelas.. Uma com os avisos, e na outra eu controlo os aviso de cada usuario se foi lida ou não, utilizando PK composta.

O que eu to precisando fazer, é pesquisar um texto dentro da tabela avisos dos campos (titulo e descrição), e só mostrar os que são do usuário logado.

Por exemplo:
Meus cadastros são:
Usuarios
id, usuario, aviso, lida
0,	  4,	   1,	 1
0,	  5,	   1,	 1
0,	  4,	   2,	 1
0,	  5,	   2,	 1
0,	  4,	   3,	 1
0,	  5,	   3,	 1
0,	  4,	   4,	 1
0,	  5,	   4,	 1
0,	  8,	   4,	 1

Avisos
id,	 titulo,		   descricao,			   data,		 foto,		legenda
4,	 'teste',			 'teste',		'dd/mm/aaaa',	  '0',			'teste'
5,	'asfdasd',		'asfdasdf',	 'dd/mm/aaaa',	   '0',			  ''
6,	 'Teste 01',	 'Teste 01',	  'dd/mm/aaaa',	  '0',		 'Teste 01'
7,	   'tfvtf',		   'ygbygb',		 '01/01/0101',	  '0',			  ''


Meu problema que não to conseguindo selecionar das 2 tabelas.. fiz assim.. mais não funcionou:
SELECT * FROM usuario_avisos,avisos WHERE usuario_avisos.usuario = '$id_usuario' AND (avisos.titulo LIKE '%$valor%' OR avisos.descricao LIKE '%$valor%') GROUP BY avisos.id ORDER BY usuario_avisos.aviso desc

Ele ta selecionando do usuário correto, porém só traz 1 item, sendo que deveria puxar 2 itens.
Esta certo essa maneira?

Aguardo resposta e desculpem se não ficou postado da maneira correta.
Abraços,
Anderson possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#2 mestrexim

mestrexim

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Não informado

Posted 16/08/2008, 12:44

tenta usar um while
$dados = mysql_fetch_array($querydatabela) or die(mysql_error());
 while($dados){
		$id_usuario = $dados["id_usuario"];
		   echo $id_usuario;
// e por ai vai os campos;
}
abraço

#3 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 16/08/2008, 17:45

Velho, essa sua junção tá meio esquisita... faz usando JOIN que é tranquilo.
SELECT ... FROM avisos JOIN usuario_avisos ON usuario_avisos.id_aviso = aviso.id WHERE usuario_aviso.id_usuario = X

A idéia é essa (y)

#4 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 18/08/2008, 11:34

entao mestrexim, isso eu sei fazer, exibir os resultados.. O que preciso eh "filtrar" eles, que são dados vindo de 2 tabelas, isto é.. preciso selecionar só os usuários de 1 tabela, e depois só os avisos com o texto pesquisado, de outra tabela..

Não sei se consegui explicar.. hehehe




boirock, é mais ou menos isso mesmo que eu quero.. mais não sei como funciona direito a sintaxe JOIN...
tentei intender através do do MANUAl, mais não intendi muito bem..

Pelo que intendi, minha sintaxe ficou assim:
SELECT * FROM usuario_avisos JOIN avisos ON usuario_avisos.usuario = '$id_usuario' WHERE avisos.titulo LIKE '%$valor%' OR avisos.descricao LIKE '%$valor%' ORDER BY usuario_avisos.aviso desc

traduzindo:
Selecione tudo da tabela usuario_avisos e avisos, SOMENTE os registros que usuario = $id_usuario, onde o titulo e a descriçao contenha $valor.

Fiz dessa maneira, que a meu ver esta certo, porém ele ta exibindo todos os resultados, e mostrando 4 vezes cada um..
Segue a screen:
Attached File  screen.JPG   136.75KB   2 downloads


Vou fazer mais uns testes aqui..
Por enquanto, muito obrigado pela força.

Abraços,
Possamai


Pessoal... tirei um print do meu bd pra vc's intenderem melhor..

ta aqui ele:
Attached File  bd.JPG   95.86KB   3 downloads


Pra fazer o cadastro de um aviso eu uso esse código:
$x = mysql_query("INSERT INTO avisos (titulo, descricao, data, foto, legenda) VALUES ('$titulo','$descricao','$data','$tem_foto','$legenda')") or die(mysql_error());		
$id = mysql_insert_id();
			
	$usuarios = mysql_query("SELECT * FROM usuarios ORDER BY id ASC");
		while ($z = mysql_fetch_array($usuarios)){
			$usuario = $z['id'];
			$y = mysql_query("INSERT INTO usuario_avisos (usuario, aviso, lido) VALUES ('$usuario','$id', 0)") or die(mysql_error());
		}

Que nada mais faz, que cadastrar o aviso pra cada usuário cadastrado.

Espero que possam me ajudar.

OBS.: Desculpem, não sei se isso eh dar UP, so cadastrei nova resposta pra acrescentar a informação do bd.

Abraços,
Anderson Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#5 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 18/08/2008, 11:55

Cara, vc ainda não pegou a lógica do JOIN :D
Quando você usa o JOIN está usando um relacionamento, mas precisa determinar como funciona esse relacionamento. Isso é feito no ON. Vou dar um exemplo fácil de entender:
Vamos supor que você quer selecionar as cidadaes com seus respectivos estados, sendo que cada um é uma tabela separada.
SELECT cidade.nome, estado.nome FROM cidade JOIN estado ON estado.codigo = cidade.codigo_uf
No caso eu tenho que igualar o estado.codigo com um campo da tabela cidade, pois ele fará esse relacionamento uma vez para cada linha retornada pelo SELECT de cidades...
Pense nisso como dois selects separados, só que feitos de uma única vez.

As restrições você fará no WHERE. Exemplo: se eu quisesse selecionar apenas as cidades com mais de 100 habitantes da região SUL, faria assim:
SELECT cidade.nome, estado.nome FROM cidade JOIN estado ON estado.codigo = cidade.codigo_uf WHERE cidade.habitantes > 100 AND estado.regiao = 'S'
Sacou? (y)

#6 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 13822 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 23/09/2017, 10:44

Viagra Uk Without Prescription 50 Mg Di Sildenafil Cialis 20 Prezzo cialis Mercalm Medication Cheap Tretinoin




0 user(s) are reading this topic

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

IPB Skin By Virteq