• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

sike

Relacionar 2 tabelas

15 mensagens neste tópico

Estou com uma dúvida em relacionar duas tabelas no mysql.

Tenho as seguintes tabelas news , users e news_type.

A tabela news tem um campo "news_poster" que quero relacionar com o campo "user_id" ( da tabela user) mas não estou a conseguir fazer.

Também queria fazer o mesmo com um campo da tabela news chamado news_type para relacionar com um campo da tabela news_type com o nome de type_id.

Resumindo estou a tentar relacionar tudo de uma noticia, mas a "ligar" com a lista de users e o tipo de notica ( para depois filtrar).

?php 
			  
$result = mysql_query("SELECT * FROM news");
while ( $registo = mysql_fetch_object($result)) { ?>
								  
<td class="news_autor">Por Tiago "<strong><?php echo $registo->news_poster ?></strong>" Nascimento a <?php echo $registo->date ?> </td>
                           
<?php } ?>

Thanks in advance ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens uns erros no teu código:

$result = mysql_query("SELECT * FROM news");
while ( $registo = mysql_fetch_object($result)) { ?>
								  
<td class="news_autor">Por Tiago "<strong><?php echo $registo['news_poster']; ?></strong>" Nascimento a <?php echo $registo['date']; ?> </td>
                           
<?php } ?>

Estavas aceder a $registo como se a variável fosse o objecto quando na verdade é uma array ;)

EDIT: Esquece, vi mal o teu código ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas ele esta como object :o pelo menos eu criei como objecto, "mysql_fetch_object".

Mas o código esta a funcionar o que lá esta agora falta-me criar o resto que digo ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas ele esta como object :o pelo menos eu criei como objecto, "mysql_fetch_object".

Mas o código esta a funcionar o que lá esta agora falta-me criar o resto que digo ;)

My bad, não reparei nisso ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora há alguma coisa de melhor ou pior de usar um ou outro ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente o objectivo final da "coisa" vai ser ter noticias de várias categorias. Por isso criei um campo na tabela de noticias para depois filtrar.

E quero que apareca também  quem criou a noticia daí o campo do user.

Consegui expressar-me melhor ?  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então tens os campos User e Categoria...

Deves alterar a query para

SELECT * FROM news WHERE categoria='qualquer coisa'

e assim mostras uma categoria de cada vez.

Ah! E depois se queres ir buscar a data de nascimento do user, tens de fazer uma query que deve ser qualquer coisa como

SELECT data_nascimento FROM user WHERE id = id_poster

Em que o id_poster é o user_id retornado na query anterior.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sou mesmo eu que não me consigo explicar ;)

O que eu quero fazer é na noticia apenas coloco o id do poster e ele vai buscar a tabela dos users o nome do user.

E o que esta como "date" é a data a que a noticia é colocada, está bem ;)

Quanto á "filtragem" obrigado porque mais tarde ia precisar disso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT news.news_poster, users.user_id
FROM news, users
WHERE news.news_poster = users.user_id;

Qualquer coisa deste género?

Obviamente isto é só um exemplo para te ajudar a juntar as tabelas, pois penso que a tua dúvida basicamente é essa...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exactamente ;)

Era algo desse genero que estava a tentar encontrar.

Vou testar amanha e depois digo se funcionou.

E já agora se quizesse adicionar o tipo de noticia ? Da mesma maneira que a dos users ? Colocar um "AND" e a outra condição ?

Desde ja obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Imaginando que tens as seguintes tabelas com estes atributos:

news (news_poster, news_type, news_title, news_text)
user (user_id, username)
news_type (type_id, type)

Poderás fazer algo do género:

SELECT 
news.news_title, news.news_text, users.username, news_type.type
FROM
news, news_type, users
WHERE 
news.news_poster = users.user_id AND
news.news_type = news_type.type_id

O resultado será um conjunto de notícias com os seguintes dados: o título e texto da notícia, o nome do utilizador que a redigiu, e o tipo de notícia!

Nota: Se estás a dar os primeiros passos no SQL, podes dar uma vista de olhos no artigo que está a ser redigido por mim, Introdução ao MySQL - Parte 1 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

edit.

Já consegui resolver e colocar isto como queria. Tive ajuda de um Pró  :ipool:

Só a titulo de curiosidade deixo aqui o final.

SELECT
news.news_id,
news.title,
news.body,
news.date,
news_type.name AS type,
users.nick AS poster_nick,
users.name AS poster_name,
users.surname AS poster_surname
FROM
news,
users,
news_type
WHERE
news.news_type = news_type.type_id AND
news.news_poster = users.users_id

Também sei que alguns nomes dos campos não estao de facil compreensão e até podiam ter nomes mais curtos.

Obrigado a todos os que me ajudaram  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tinhas a solução na resposta que te dei acima, só faltava adaptares ao teu problema em concreto, ou seja, renomeares os campos!

Bom trabalho ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tinhas a solução na resposta que te dei acima, só faltava adaptares ao teu problema em concreto, ou seja, renomeares os campos!

Bom trabalho :)

Sim, eu usei o teu eu até ja tinha postado a dizer que tinha funcionado so que o problema era outro, mas como editei para por o resultado final não chegaste a ver ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora