Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

vsempre

Como buscar o nome a outra tabela?

Mensagens Recomendadas

vsempre    0
vsempre

Boas pessoal,

Estou outra vez com um pequeno problema. Desde já agradeço a vossa ajuda.

Bem, o problema é o seguinte, tenho uma tabela "clubes" e outra "classificacao".

Na "classificacao" tenho um campo "clube_id" que vai buscar o id do clube. Até aqui, tudo bem, o problema é quando quero visualizar os resultados numa página.

Apenas consigo com que apareça um clube.

Aqui ficam os códigos.

As Querys:

<?php
$colname_rsClassfModa = "-1";
if (isset($_GET['m'])) {
  $colname_rsClassfModa = $_GET['m'];
}
mysql_select_db($database_ligacao, $ligacao);
$query_rsClassfModa = sprintf("SELECT * FROM classificacao WHERE mod_id = %s ORDER BY pontos DESC", GetSQLValueString($colname_rsClassfModa, "int"));
$rsClassfModa = mysql_query($query_rsClassfModa, $ligacao) or die(mysql_error());
$row_rsClassfModa = mysql_fetch_assoc($rsClassfModa);
$totalRows_rsClassfModa = mysql_num_rows($rsClassfModa);

mysql_select_db($database_ligacao, $ligacao);
$query_rsClassClubNome = "SELECT id, nome FROM clubes WHERE id = $row_rsClassfModa[clube_id]";
$rsClassClubNome = mysql_query($query_rsClassClubNome, $ligacao) or die(mysql_error());
$row_rsClassClubNome = mysql_fetch_assoc($rsClassClubNome);
$totalRows_rsClassClubNome = mysql_num_rows($rsClassClubNome);

?>

Mostrando os resultados:

  <?php do { ?>
    <tr>
      <td><?php echo $row_rsClassClubNome['nome']; ?></td>
      <td width="40" align="center"><?php echo $row_rsClassfModa['jogos']; ?></td>
      <td width="40" align="center"><?php echo $row_rsClassfModa['vitorias']; ?></td>
      <td width="40" align="center"><?php echo $row_rsClassfModa['empate']; ?></td>
      <td width="40" align="center"><?php echo $row_rsClassfModa['derrotas']; ?></td>
      <td width="40" align="center"><?php echo $row_rsClassfModa['pontos']; ?></td>
    </tr>
    <?php } while ($row_rsClassfModa = mysql_fetch_assoc($rsClassfModa)); ?>

Desde já agradeço a vossa atenção e ajuda.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Porque é que não fazes tudo num único select?

SELECT clubes.nome, classificacao.jogos, classificacao.vitorias,
       classificacao.empate, classificacao.derrotas, classificacao.pontos
FROM classificacao INNER JOIN clubes ON classificacao.clube_id = clubes.id
WHERE classificacao.mod_id = <USERINPUT>
ORDER BY classificacao.pontos DESC

Atenção: select não testado!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Boas pmg,

Antes de mais, obrigado pela ajuda.

Já testei o teu select no phpmyadmin e funciona, no entanto no browser não me aparece o nome do clube.

Estou a usar o seguinte echo:

<?php echo $row_rsClassfModa['clubes.nome']; ?>

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Experimenta

<?php echo $row_rsClassfModa['nome']; ?>

ou então dá nomes 'simples' às colunas resultantes do select

SELECT clubes.nome AS nome, classificacao.jogos AS jogos, classificacao.vitorias AS vitorias,
       classificacao.empate AS empate, classificacao.derrotas AS derrotas, classificacao.pontos AS pontos
FROM ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Hmm.. no INNER JOIN posso ir buscar dois dados diferentes à mesma tabela.

Já andei a pesquisar e apenas encontro exemplos para apenas um dado...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Não é bem isso que pretendo.

Vou deixar aqui o código que pretendo utilizar, embora não esteja a funcionar.

SELECT clubes.nome, calendario.clube_casa, calendario.clube_fora, calendario.data FROM calendario INNER JOIN clubes ON calendario.clube_casa = clubes.id, calendario.clube_fora = clubes.id WHERE mod_id = 1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Mas eu não quero que isso seja uma condição.

A ideia é obter os nomes dos clubes da modalidade X, neste caso, o nome do clube que joga em casa e o nome do clube que joga fora.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Battousai    1
Battousai

Então faz um select às duas tabelas

SELECT t1.campo,t2.campo FROM t1,t2 WHERE t1.campo=t2.campo AND t1.campo2=t2.campo4

não sei se com RIGHT OUTER JOIN vai lá com a base de dados que tens.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Bem, acho que não me estou a expressar da melhor forma, por isso o melhor é mesmo colocar aqui o código.

A Query:

<?php
$colname_rsCalenMod = "-1";
if (isset($_GET['m'])) {
  $colname_rsCalenMod = $_GET['m'];
}
mysql_select_db($database_ligacao, $ligacao);
$query_rsCalenMod = sprintf("SELECT clubes.nome, calendario.clube_casa, calendario.clube_fora, calendario.data FROM calendario INNER JOIN clubes ON calendario.clube_casa = clubes_id,calendario.clube_fora = clubes.id  WHERE mod_id = %s ORDER BY `data` DESC", GetSQLValueString($colname_rsCalenMod, "int"));
$rsCalenMod = mysql_query($query_rsCalenMod, $ligacao) or die(mysql_error());
$row_rsCalenMod = mysql_fetch_assoc($rsCalenMod);
$totalRows_rsCalenMod = mysql_num_rows($rsCalenMod);
?>

Mostrando os resultados:

  <?php do { ?>
    <tr>
      <td align="center"><?php echo $row_rsCalenMod['nome']; ?></td>
      <td align="center">x</td>
      <td align="center"><?php echo $row_rsCalenMod['nome']; ?></td>
      <td align="center"><?php echo $row_rsCalenMod['data']; ?></td>
    </tr>
    <?php } while ($row_rsCalenMod = mysql_fetch_assoc($rsCalenMod)); ?>

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Acho que queres os nomes dos dois clubes que vão jogar, certo?

Faz assim (pseudo-código)

select ...
from calendario, clubes casa, clubes visitante
where calendario.clube_casa = casa.id and calendario.clube_fora = visitante.id
and ...
order by ...

Eu não sei escrever INNER JOINS com o formato que 'toda a gente' usa.

O que eu pus ali em cima no where, seria feito por 'toda a gente' com "INNER JOIN"

O que o meu select faz é o seguinte:

No FROM estão três tabelas, duas das quais são a mesma e por isso mesmo, para as distinguir, dou-lhes outro nome.

Depois no WHERE ligo a tabela calendario à tabela casa (um INNER JOIN) e ligo também à tabela visitante (outro INNER JOIN), mas como não sei escrever INNER JOINs faço as ligações com o WHERE.

No resto das condições do WHERE metes os limites que precisas.

EDIT

select ... casa.nome, visitante.nome, ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Boas,

Não percebi bem o teu select, fiz o seguinte, não me dá erro, mas também não me dá resultados ;)

SELECT * from calendario, clubes
where calendario.clube_casa = clubes.id and calendario.clube_fora = clubes.id AND mod_id = 1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

O que é que queres dizer com "não me dá resultados"?

Experimentaste o select no phpmyadmin?

O que é que acontece se tirares a última parte?

SELECT * FROM calendario, clubes
WHERE calendario.clube_casa = clubes.id AND calendario.clube_fora = clubes.id

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Mostra a estrutura das tuas tabelas 'calendario', 'classificacao' e 'clubes'.

Executa os comandos seguintes no phpmyadmin:

DESCRIBE calendario;
DESCRIBE classificacao;
DESCRIBE clubes;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vsempre    0
vsempre

Executando esses comandos obtenho:

DESCRIBE calendario;# Registos: 6

DESCRIBE classificacao;# Registos: 9

DESCRIBE clubes;# Registos: 4

Mas penso que queres é saber isto:

calendario:

`calendario` (

  `id` int(11) NOT NULL auto_increment,

  `mod_id` int(11) NOT NULL,

  `ep_id` int(11) NOT NULL,

  `clube_casa` int(11) NOT NULL,

  `clube_fora` int(11) NOT NULL,

  `data` date NOT NULL,

  PRIMARY KEY  (`id`)

)

classificacao:

`classificacao`

(

  `id` int(11) NOT NULL auto_increment,

  `mod_id` int(11) NOT NULL,

  `ep_id` int(11) NOT NULL,

  `clube_id` int(11) NOT NULL,

  `jogos` int(11) NOT NULL,

  `vitorias` int(11) NOT NULL,

  `empate` int(11) NOT NULL,

  `derrotas` int(11) NOT NULL,

  `pontos` int(11) NOT NULL,

  PRIMARY KEY  (`id`)

)

clubes:

`clubes` (

  `id` int(11) NOT NULL auto_increment,

  `nome` varchar(255) NOT NULL,

  `logotipo` varchar(255) NOT NULL,

  `infos` text,

  PRIMARY KEY  (`id`)

)

Atenção: A minha dúvida no primeiro post (classificacao), a mesma já está resolvida. Falta-me agora é no "calendario"

Obrigado pela ajuda.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Sim, era isso que eu queria ;)

O select seguinte funciona? Isto é: devolve o nome do clube que vai jogar em casa para cada `id` do calendário?

SELECT calendario.id, calendario.data, clubes.nome AS ClubeCasa
FROM calendario, clubes
WHERE calendario.clube_casa = clubes.id

E este diz quem vai jogar fora?

SELECT calendario.id, calendario.data, clubes.nome AS ClubeFora
FROM calendario, clubes
WHERE calendario.clube_fora = clubes.id

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

E este não 'funciona'?

SELECT calendario.id, calendario.data, casa.nome AS ClubeCasa, visitante.nome AS ClubeFora
FROM calendario, clubes casa, clubes visitante
WHERE calendario.clube_casa = casa.id AND calendario.clube_fora = visitante.id

Este select é o "mesmo" que eu pus aqui ontem, em pseudo-código!

Se não funciona qual é o erro?

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade