Carlos Renan Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Olá gente... estou com um problema em um sistema de listagem de albuns que estou tentando fazero problema tah acontecendo porque preciso puxar dados de 3 tabelas diferentesuma para puxar o nomeoutra a fotoe outra os albuns que devem ser listadoso problema que está ocorrendo é que só está sendo puxado o codigo do 3º while <? while ($dados=mysql_fetch_array($limite)) {?> <? while ($dados1=mysql_fetch_array($limite1)) {?> <? while ($dados2=mysql_fetch_array($limite2)) {?>a seguir o código completo dá pagina que estou fazendo<? if ($logado) { ?><style type="text/css"><!--.styleoalbum1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9px;}--></style><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top"><?$pg=$_GET[pg];$page=$_GET$total_reg = "15";if(!$page){$page = "1";}$inicio = $page-1;$inicio = $inicio*$total_reg;////////////////////////////////////////////////////////////////////////////$buscafoto = "SELECT * FROM albuns";$limite1 = mysql_query("$buscafoto LIMIT 1");$todos1 = mysql_query("$buscafoto");////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////$busca = "SELECT * FROM albuns_lista order by id desc";$limite = mysql_query("$busca LIMIT $inicio,$total_reg");$todos = mysql_query("$busca");$tr = mysql_num_rows($todos);$tp = ceil($tr / $total_reg);////////////////////////////////////////////////////////////////////////////$buscanome = "SELECT * FROM phpsp_users";$limite2 = mysql_query("$buscanome LIMIT $inicio,$total_reg");$todos2 = mysql_query("$buscanome");////////////////////////////////////////////////////////////////////////////?> <table width="100" border="0" align="center" cellpadding="0" cellspacing="0"> <?// Defina o número de colunas que você deseja exibir: $colunas = "2"; // Agora vamos ao "truque": if ($total>0) { for ($i = 0; $i < $total; $i++) { if (($i%$colunas)==0) { ?> <tr align="center" bgcolor="<? echo $bgcolor; ?>"> <? }?> <? while ($dados=mysql_fetch_array($limite)) {?> <? while ($dados1=mysql_fetch_array($limite1)) {?> <? while ($dados2=mysql_fetch_array($limite2)) {?><? $fotos = substr($dados1[fotos],6);?> <td align="center"><a href="java script:AbreAlbum('estrutura/usuarios_vip/album.php?id=<? echo $dados[id_user]?>');"> <img src="thumbs.php?w=100&h=75&imagem=<? echo "$fotos";?>" width="100" height="75" border="0" style="border:0px solid #999999;FILTER: alpha(opacity=100)" /></a> <? echo "<b>$dados2[nome]</b>"; ?></td> <td align="center"> </td> <? }}}}}?> </tr> </table> <br /> <table border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="100" align="right" valign="top"><?if($page > 1){$anterior = $page -1;$url = "?pg=$pg&page=$anterior";echo "<a href='$url'>« Anterior</a> |";} else {echo "<font color='#ffffff'>« Anterior</font> |";}?> </td> <td align="center"><? for($x=1; $x<=$tp; $x++){$url = "?pg=$pg&page=$x"; if ($x==$page) { echo "<font color='$coronmouse'><b>$x</b></font>|"; } else { echo "<a href='$url'>$x</a>|"; }} ?> </td> <td width="100" align="left" valign="top"><?if($tp > $page){$proxima = $page +1;$url = "?pg=$pg&page=$proxima";echo " <a href='$url'>Próxima »</a>";} else {echo " <font color='#ffffff'>Próxima »</font>";}?> </td> </tr> </table> <br /> <br /></td> </tr></table><? } else {?><p><font face="Verdana" size="1">Você não não está autorizado a ver esta página</font></p><? }?>;o que devo fazer para que os 3 dados sejam puxados? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Porque ao invés de colocar um laço dentro do outro você não faz um JOIN e pega todos os dados de uma vez com uma query apenas? Acho que o problema ai é na lógica da construção... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 7, 2007 Autor Denunciar Share Postado Novembro 7, 2007 (editado) Porque ao invés de colocar um laço dentro do outro você não faz um JOIN e pega todos os dados de uma vez com uma query apenas? Acho que o problema ai é na lógica da construção...cara... pra ser sincero não faço isso porque sou muito iniciante em php e to fazendo nah marra.... num tenho nenhum curso.. nem basico....então o que faço faço na marra.....c poderia me ajudar? Editado Novembro 7, 2007 por Carlos Renan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Bom, só que isso que eu passei é questão de SQL... qual a modelagem das tabelas e qual o relacionamento entre elas? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 7, 2007 Autor Denunciar Share Postado Novembro 7, 2007 (editado) to enviando o link para você ver as 3 sql's....tipow... o relacionamento entre elas é feito através de um campo chamado de "id_user" (na tabela albuns e albuns _lista)e por um campo chamado "primary_key" na tabela phpsp_usersos 3 campos tem o msmo id...http://www.us3design.com.br/albuns.zip Editado Novembro 7, 2007 por Carlos Renan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Então...SELECT al.*,a.*,u.* FROM phpsp_users u LEFT JOIN albuns_lista al ON al.id_user = u.primary_key LEFT JOIN albuns a ON a.id_user = u.primary_key WHERE...Só não entendi pra que a tabela "albuns_lista" já que pelo menos nesse contexto ela não tem serventia... eu deixei o WHERE pra você completar... também dá pra usar o LIMIT e etc, só lembre-se de colocar o alias da tabela antes da coluna, por exemplo se quiser usar a coluna nome da tabela phpsp_users no WHERE coloque:WHERE u.nome = 'NOME QUALQUER'.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 7, 2007 Autor Denunciar Share Postado Novembro 7, 2007 (editado) cara.... pra deixar mais facil...baseado no codigo q você forneceu eu fiz assim<?$query = "SELECT albuns.* , albuns_lista.* , phpsp_users.* FROM albuns INNER JOIN albuns_lista ON (albuns.id_user = albuns_lista.id_user) INNER JOIN phpsp_users ON (albuns.id_user = phpsp_users.primary_key)";$limite = mysql_query("$query LIMIT $inicio,$total_reg");?><?while ($dados=mysql_fetch_array($limite)) {?>tipow... só tem um problema que deu em ambos os códigos...por exemplo... se um usuário tiver 5 fotos ele cria como se fosse um albun para cada foto.....como faço para que se tiver por exemplo 10 usuarios com 15 fotos cada.... ele liste somente um albun para cada usuário?ah...e a tabela albuns_lista serve para listar somente albuns que tem fotos....axo que dá pra fazer puxando da albuns... mas como não sei fz criei essa... Editado Novembro 7, 2007 por Carlos Renan Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Deixa eu ver se eu entendi... você criou a tabela albuns, então se eu colocar 15 fotos no meu álbum vou ter 15 registros nesse tabela? Se for então a modelagem está errada, e nesse caso acho que fica complicado, porque para evitar repetição de registros a gente usar o DISTINCT só que ai vai gerar o erro que ele só vai encontrar um foto em cada álbum...como a modelagem está errada, vai ter que usar uma solução tabajara... primeiro seleciona os albuns, ai joga no laço e a cada volta busca os outros dados...SELECT DISTINCT(id_user),* FROM albuns ORDER BY id Ai no laço... $sql = //Aqui executou a query acima... While($x = mysql_fetch_assoc($sql)){ $id_user = $x['id_user']; $query = "SELECT albuns.* , albuns_lista.* , phpsp_users.* FROM albuns INNER JOIN albuns_lista ON (albuns.id_user = albuns_lista.id_user) INNER JOIN phpsp_users ON (albuns.id_user = phpsp_users.primary_key) WHERE albuns.id_user = '$id_user'"; }Obvio que ali vai ter que rolar mais um laço para pegar os dados... mas a modelagem da tabela tá pra lá de tabajara... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 7, 2007 Autor Denunciar Share Postado Novembro 7, 2007 cara... deu um erro..Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/renan/public_html/estrutura/usuarios_vip/123.php on line 28ou seja na linhaWhile($x = mysql_fetch_assoc($sql)){onde eu errei no código?<? if ($logado) { ?><style type="text/css"><!--.styleoalbum1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9px;}--></style><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top"><?$pg=$_GET[pg];$page=$_GET$total_reg = "15";if(!$page){$page = "1";}$inicio = $page-1;$inicio = $inicio*$total_reg;$sql = "SELECT DISTINCT(id_user),* FROM albuns ORDER BY id";While($x = mysql_fetch_assoc($sql)){$id_user = $x['id_user'];$query = "SELECT albuns.* , albuns_lista.* , phpsp_users.* FROM albunsINNER JOIN albuns_lista ON (albuns.id_user = albuns_lista.id_user)INNER JOIN phpsp_users ON (albuns.id_user = phpsp_users.primary_key)WHERE albuns.id_user = '$id_user'";} $limite = mysql_query("$query LIMIT $inicio,$total_reg");?> <table width="100" border="0" align="center" cellpadding="0" cellspacing="0"> <?// Defina o número de colunas que você deseja exibir: $colunas = "2"; // Agora vamos ao "truque": if ($total>0) { for ($i = 0; $i < $total; $i++) { if (($i%$colunas)==0) { ?> <tr align="center" bgcolor="<? echo $bgcolor; ?>"> <? }?> <?while ($dados=mysql_fetch_array($limite)) {?><? $fotos = substr($dados[fotos],6);?> <td align="center"><a href="java script:AbreAlbum('estrutura/usuarios_vip/album.php?id=<? echo $dados[id_user]?>');"> <img src="thumbs.php?w=100&h=75&imagem=<? echo "$fotos";?>" width="100" height="75" border="0" style="border:0px solid #999999;FILTER: alpha(opacity=100)" /></a> <? echo "<b>$dados[nome]</b>"; ?></td> <td align="center"> </td> <? }}}?> </tr> </table> <br /> <table border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="100" align="right" valign="top"><?if($page > 1){$anterior = $page -1;$url = "?pg=$pg&page=$anterior";echo "<a href='$url'>« Anterior</a> |";} else {echo "<font color='#ffffff'>« Anterior</font> |";}?> </td> <td align="center"><? for($x=1; $x<=$tp; $x++){$url = "?pg=$pg&page=$x"; if ($x==$page) { echo "<font color='$coronmouse'><b>$x</b></font>|"; } else { echo "<a href='$url'>$x</a>|"; }} ?> </td> <td width="100" align="left" valign="top"><?if($tp > $page){$proxima = $page +1;$url = "?pg=$pg&page=$proxima";echo " <a href='$url'>Próxima »</a>";} else {echo " <font color='#ffffff'>Próxima »</font>";}?> </td> </tr> </table> <br /> <br /></td> </tr></table><? } else {?><p><font face="Verdana" size="1">Você não não está autorizado a ver esta página</font></p><? }?>; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Troque:$sql = "SELECT DISTINCT(id_user),* FROM albuns ORDER BY id"; While($x = mysql_fetch_assoc($sql)){ Por: $sql = mysql_query("SELECT DISTINCT(id_user),* FROM albuns ORDER BY id"); While($x = mysql_fetch_assoc($sql)){ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 7, 2007 Autor Denunciar Share Postado Novembro 7, 2007 continua dando o msmo erro noWhile($x = mysql_fetch_assoc($sql)){ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 7, 2007 Denunciar Share Postado Novembro 7, 2007 Como informado pelo PHP o erro está no argumento, e o argumento é a linha anterior, ou seja:$sql = mysql_query("SELECT DISTINCT(id_user),* FROM albuns ORDER BY id");Troque por:$sql = mysql_query("SELECT DISTINCT(id_user),* FROM albuns ORDER BY id") OR DIE (mysql_error());Isso vai fazer com que o MySQL informe o erro... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 8, 2007 Autor Denunciar Share Postado Novembro 8, 2007 deu o seguinte erroYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM albuns ORDER BY id' at line 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 8, 2007 Denunciar Share Postado Novembro 8, 2007 SELECT DISTINCT(id_user) FROM albuns ORDER BY idAcho que daria pra fazer com uma só consulta se for utilizado sub-query... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Renan Postado Novembro 8, 2007 Autor Denunciar Share Postado Novembro 8, 2007 com o distinct funciona a selecão individual de apenas um album por usuário....mas em compensação não funciona a seleção das fotos do respectivo album....ou seja a miniatua não pega o link...hehehhehehe Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Carlos Renan
Olá gente... estou com um problema em um sistema de listagem de albuns que estou tentando fazer
o problema tah acontecendo porque preciso puxar dados de 3 tabelas diferentes
uma para puxar o nome
outra a foto
e outra os albuns que devem ser listados
o problema que está ocorrendo é que só está sendo puxado o codigo do 3º while
a seguir o código completo dá pagina que estou fazendo;
o que devo fazer para que os 3 dados sejam puxados?
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.