Jump to content


Photo

30 Recordsets?


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

#1 Microbyte

Microbyte

    12 Horas

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

Posted 12/07/2006, 09:39

Olá pessoal! Tudo bom com voces?

Estou com um probleminha de query SQL. Vou passar a explicar tudo.
Estou a montar um site de Clube de Vídeo. Então, tenho uma tabela em MySQL para os filmes todos ('tbl_filmes'), outra para o top30 ('top30'), onde estão apenas 30 id's de filmes que estão no top30 do clube de vídeo. Estas id's correspondem com as id's dos filmes na tabela 'tbl_filmes'.

A estrutura da tabela 'top30' é a seguinte:
Posted Image

Estes campos correspondem às colunas da tabela, ou seja, a coluna 1 corresponde à posição 1 no top 30.
Depois tenho de criar um query para ir buscar o nome do filme. Aí é que estou com uma dúvida: "Tenho de criar 30 Recordsets, ou query's???"

Pois é... Não me parece... Há-de haver outra forma de fazer isso... :-s penso eu...

Mas por enquanto estava tudo bem... os 30 recordsets apareciam todos...
mas agora arranjei um script que mostra os resultados em várias colunas e assim, tenho que fazer tudo com uma query apenas.

Qual a query que devo usar, ou qual a melhor forma de mostrar os resultados em 3 colunas sem ter de fazer 30 recordsets?

Cumprimentos,
microbyte

#2 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 12/07/2006, 09:51

Procure aqui no fórum sobre COLUNAS, o Balala chegou a criar um tutorial!

procure também sobre páginação ;)

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#3 raphaelcarlos

raphaelcarlos

    Futebol, Cerveja e Familia Ø VIVA LoCuRa Ø

  • Usuários
  • 239 posts
  • Sexo:Não informado
  • Localidade:Sao paulo

Posted 12/07/2006, 09:52

use no final da query LIMIT 3,

acho que é isso que entendi ..
Raphael prefere :
Mozilla/5.0 => Tema :Noia 2.0 (eXtreme) | Linux Mandriva
Linguagens :
PHP | ASP | VB | JavaScript | Dhtml |
Banco de dados :
ODBC | Mysql | SQL Server | Oracle 10g
To aprendendo :
Java | Ajax | Web 2.0
Ferramentas :
PL - SQL | Mysql Front | PHP editor | PhotoShop | Mysql Adminstrator

#4 Microbyte

Microbyte

    12 Horas

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

Posted 12/07/2006, 10:01

O meu problema não é a paginação, o problema é a query que tenho de utilizar na paginação.

Vou explicar como tava a fazer...
Top30 - posição 1:
"SELECT tbl_filmes.nome, top30.`1` FROM tbl_filmes, top30 WHERE tbl_filmes.id = top30.1"


E tinha um query para cada posição! mas eu quero fazer tudo automaticamente, ou seja, associar a id na coluna do top30 à id do filme na tabela principal (tbl_filmes)

#5 Milton Fernandes

Milton Fernandes

    Normal

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

Posted 12/07/2006, 10:23

Bom, pelo que eu entendi vc quer uma query que tenha um join que vai retornar uma tabela so com o topo e o nome do filme.... se for isso vai ter que ser algo mais ou menos assim ó:

select top30.campo , tbl_filmes.nome from top30, tbl_filmes where top30.tipo = tbl_filmes.id order by top30.campo DESC 


Brother, é algo mais ou menos assim, tenho certeza q a logica é essa... abs.. tem que so dar mais um where pra tirar o campo id da selecao, q alias nao sei pq esta nesta tabela, nem o campo id nem o campo mes... E colocar um limite de 30 tbm pra ele nao pegar as outras linhas q nao tem nada a ver...

Posta ai se for isso mesmo.. abs

Edição feita por: Milton Fernandes, 12/07/2006, 10:24.


#6 gennf

gennf

    A Solução está ai...

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG

Posted 13/07/2006, 08:27

Acredito que um top não seja feito dessa maneira, definindo um número de colunas.
Muito mais simples seria se vc fizesse apenas assim a estrutura da tabela:

id----------nome----------cliques

Isso seria o básico da tabela talvez quem sabe colocar ali um campo data pra pegar o ultimo acesso à determinada coisa (não sei o que é).

Seguindo meu raciocinio dessa forma depois disso vc faria apenas um SELECT com um IF caso aquele nome já exista na tabela UPDATE na coluna CLIQUES caso o NOME ainda não exista INSERT na tabela e dessa forma vc iria formando seu TOP e pra saber os 30 primeiros vc teria apenas que ordenar em ordem decrescente de acordo com a COLUNA CLIQUES.

Bom, é a minha opinião. Se falei besteiras me desculpe.

Té mais ;)
Portal BatePapoBrasil
URL: www.batepapobrasil.com

----------------------------
Site desenvolvidos
URL:
VitrineABC :: Alugue Litoral :: OrtodontiaLago

#7 Microbyte

Microbyte

    12 Horas

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

Posted 13/07/2006, 10:09

Mas a mim não me interessa ter dados duplicados.
A informação dos filmes tenho na tbl_filmes (nome, nome original, ano, ......)

Na tabela top30, apenas quero ter as ids dos filmes e associá-las às ids na tbl_filmes e aí ir buscar o resto da informação! ;)

#8 gennf

gennf

    A Solução está ai...

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG

Posted 13/07/2006, 12:04

Quem disse que terá dados duplicados???

Seguindo meu raciocinio dessa forma depois disso vc faria apenas um SELECT com um IF caso aquele nome já exista na tabela UPDATE na coluna CLIQUES caso o NOME ainda não exista INSERT na tabela e dessa forma vc iria formando seu TOP e pra saber os 30 primeiros vc teria apenas que ordenar em ordem decrescente de acordo com a COLUNA CLIQUES.


Vc leu mesmo???

EDITANDO
Normalmente o que faço é colocar uma coluna clique ou acessos ou seja lá o que for na mesma tabela que comtem os dados que no seu caso são filmes e depois vou dando UPDATE nessa coluna de acordo com que aquele FILME vai sendo exibido e depois apenas seleciono essa coluna fazendo com que seja exibida onde eu quero em ordem decrescente.

Acho muito mais fácil assim, porque dessa forma vc terá risco zero de ter dados duplicados.

Té mais ;)

Edição feita por: gennf, 13/07/2006, 12:09.

Portal BatePapoBrasil
URL: www.batepapobrasil.com

----------------------------
Site desenvolvidos
URL:
VitrineABC :: Alugue Litoral :: OrtodontiaLago

#9 Microbyte

Microbyte

    12 Horas

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

Posted 14/07/2006, 07:12

Já percebi a sua ideia! Mas você não está percebendo a minha! O clube de vídeo tem um top30 de ALUGER de filmes. O top30 do site não é o top dos mais clicados. Se assim fosse seria muito mais fácil.

Para já, o site ainda não dá para alugar, assim tive de fazer uma página onde o admin mete os ids dos filmes em 30 campos, que fazem UPDATE à tabela 'top30'.

Eu preciso de acociar cada id na 'top30' ao id na 'tbl_filmes', mas sem ter de fazer 30 querys. Há-de haver maneira da fazer só num!

#10 fly2k

fly2k

    Super Veterano

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

Posted 14/07/2006, 09:26

Velho... Olha só.. tenta fazer assim:


Tabela Top:

mestop inteiro
filmetop inteiro
ordemtop inteiro


Quando você for fazer uma inserção nesta tabela, limpe-a antes

DELETE FROM top WHERE mestop=$mes

Depois faça a inserção via um formulário de cadstro

INSERT INTO top (mestop, filmetop, ordemtop) VALUES ($mes,$filme,$ordem)

Para consultar utilize esta query

SELECT top.mestop as mes, top.ordemtop as ordem, filmes.titulo as titulo FROM top, filmes WHERE top.filmetop = filmes.codigo AND top.mes=$mes ORDEM BY top.ordemtop

Bom...agora utilizando o mysql_fetch_array....vc pode acessar como $row['titulo']

Edição feita por: fly2k, 14/07/2006, 09:27.

Quer aprender PHP? -> www.manjaphp.com.br
Tutoriais, código colaborativo (pastebin), curso de PHP, artigos e etc.

#11 Microbyte

Microbyte

    12 Horas

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

Posted 14/07/2006, 14:13

Assim parece que me vai dar para fazer!
Obrigado! Vou testar e depois digo algo! ;)

Desculpa flood, mas não está dando certo! Está exibindo em colunas, mas está exibindo sempre o mesmo resultado.

veja como tenho o código:

o meu query sql:
<?php
mysql_select_db($database_conn_fusao, $conn_fusao);
$query_Recordset1 = "SELECT top30_2.order, tbl_filmes.nome, tbl_filmes.foto FROM top30_2, tbl_filmes WHERE top30_2.id = tbl_filmes.id ORDER BY top30_2.`order`";
$Recordset1 = mysql_query($query_Recordset1, $conn_fusao) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>


meu código que mostra em colunas (seguindo tutorial de Balala):
<table width="500">
  <tr>
<?php
for($i = 1; $i <= 30; $i++)
{
  if(($i % 30) == 1)
  {
	print("<tr>");
  }
?>
	<td width="100"><div align="center"><img width="75" height="100" src="images/filmes/<?php echo $row_Recordset1['foto']; ?>" /></div><br /><?php echo $row_Recordset1['nome']; ?></td>
<?php
  if(($i % 5) == 0)
  {
	print("</tr>");
  }
}
?>
  </tr>
</table>


mas ele está a mostrar sempre o mesmo resultado! :(
Porquê? Quais as alterações que tenho de fazer? :(
podem ajudar? ;)

#12 fly2k

fly2k

    Super Veterano

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

Posted 14/07/2006, 15:29

Meu amigo...isso exige um pouco mais de leitura do que código:
http://www.php.net/m...fetch-array.php
Quer aprender PHP? -> www.manjaphp.com.br
Tutoriais, código colaborativo (pastebin), curso de PHP, artigos e etc.

#13 Microbyte

Microbyte

    12 Horas

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

Posted 16/07/2006, 08:12

mas afinal... O que devo alterar no código para que fique a funcionar?

#14 Microbyte

Microbyte

    12 Horas

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

Posted 18/07/2006, 08:24

ninguém me sabe ajudar? :(

#15 fly2k

fly2k

    Super Veterano

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

Posted 18/07/2006, 09:16

Desculpe... bom... o que voc~e não entendeu?
Quer aprender PHP? -> www.manjaphp.com.br
Tutoriais, código colaborativo (pastebin), curso de PHP, artigos e etc.




1 user(s) are reading this topic

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

IPB Skin By Virteq