Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Ao Usar While Para 3 Tabelas Diferentes


Carlos Renan

Pergunta


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

<? 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&amp;h=75&amp;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">&nbsp;</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'>&laquo; Anterior</a>&nbsp;|";

} else {

echo "<font color='#ffffff'>&laquo; Anterior</font>&nbsp;|";

}

?> </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 "&nbsp;<a href='$url'>Pr&oacute;xima &raquo;</a>";

} else {

echo "&nbsp;<font color='#ffffff'>Pr&oacute;xima &raquo;</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?

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0
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 por Carlos Renan
Link para o comentário
Compartilhar em outros sites

  • 0

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_users

os 3 campos tem o msmo id...

http://www.us3design.com.br/albuns.zip

Editado por Carlos Renan
Link para o comentário
Compartilhar em outros sites

  • 0

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'....

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Carlos Renan
Link para o comentário
Compartilhar em outros sites

  • 0

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...

Link para o comentário
Compartilhar em outros sites

  • 0


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 28
ou seja na linha

While($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 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'";

}

$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&amp;h=75&amp;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">&nbsp;</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'>&laquo; Anterior</a>&nbsp;|";

} else {

echo "<font color='#ffffff'>&laquo; Anterior</font>&nbsp;|";

}

?> </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 "&nbsp;<a href='$url'>Pr&oacute;xima &raquo;</a>";

} else {

echo "&nbsp;<font color='#ffffff'>Pr&oacute;xima &raquo;</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>

<? }?>


;

Link para o comentário
Compartilhar em outros sites

  • 0

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...

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652k
×
×
  • Criar Novo...