Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WBS DIGITAL

Chamar duas tabelas numa requisição

Recommended Posts

Boa tarde galera!
Seguinte, tenho duas tabelas no meu banco de dados e eu to chamando duas tabelas, até aí tudo bem:

$item = "select * from item INNER JOIN guia ORDER BY itemid DESC AND ORDER BY id_guia RAND()";

Nesse código to chamando todos os campos da tabela item e da tabela guia e ta aparecendo certinho no meu arquivo php, mas o que quero é q o itemid continue como DESC e que o id_guia seja randomico, o meu problema é q nesse código não funcionou, como devo tratar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tente assim:

$item = "select * from item INNER JOIN guia ORDER BY itemid DESC, id_guia RAND()";

 

Abraços

Não funcionou Leco RP, vou postar o código completo para analise e apreciação dos amigos profissionais aí.

home.php

<div id="barra-categ">
<i class="icon-reorder"></i> 
<select name="forma" onchange="location = this.options[this.selectedIndex].value;" class="inputes2">
<option value="?p=mostraanuncios&tipo=AGRO">AGRONEGÓCIOS</option>
<option value="?p=mostraanuncios&tipo=AE">ANIMAIS DE ESTIMAÇÃO</option>
<option value="?p=mostraanuncios&tipo=AVI">AVICULTURA</option>
<option value="?p=mostraanuncios&tipo=BRINQUEDOS">BRINQUEDOS</option>
<option value="?p=mostraanuncios&tipo=CELULAR">CELULAR</option>
<option value="?p=mostraanuncios&tipo=ED">ELETRODOMÉSTICOS</option>
<option value="?p=mostraanuncios&tipo=EE">ELETROELETRÔNICOS</option>
<option value="?p=mostraanuncios&tipo=EMPREGO">EMPREGOS</option>
<option value="?p=mostraanuncios&tipo=ESPORTE">ESPORTES</option>
<option value="?p=mostraanuncios&tipo=IMOVEIS">IMÓVEIS</option>
<option value="?p=mostraanuncios&tipo=INFO">INFORMÁTICA</option>
<option value="?p=mostraanuncios&tipo=MEB">MODA E BELEZA</option>
<option value="?p=mostraanuncios&tipo=MOVEIS">MÓVEIS</option>
<option value="?p=mostraanuncios&tipo=SERVICOS">PRESTAÇÃO DE SERVIÇOS</option>
<option value="?p=mostraanuncios&tipo=VEICULOS">VEÍCULOS</option>
<option value="?p=mostraanuncios&tipo=OUTROS">OUTROS</option>
</select>

</div><!--fim div barra categ-->

<?php

$item = "select * from item ORDER BY itemid DESC";
$ci = mysql_query("$item");
while ($i = mysql_fetch_array($ci)){
$idI = $i['itemid'];
$produto = $i['produto'];
$img = $i['foto'];
$tipo = $i['tipo'];
?>
	    <div class="mostra"> 
		<div class="mostratag"><b><?php echo strtoupper("$produto"); ?></b><br>
		<span class="data"><?php echo $tipo; ?></span>
		</div><!--fim mostratag-->
		<img src="produtos/<?php echo $img; ?>"/>	

		<a href="?p=mostraitem&itemid=<?php echo $idI; ?>">
		
		<div class="tt"></div>

		</a>

    </div><!--fim div mostra-->
<?php } ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo falta referenciar os campos das tabelas que você quer unir. Faça da seguinte forma:





$item = "select * from item INNER JOIN guia ON campo.item = campo.guia ORDER BY itemid DESC, id_guia RAND()";

 

com isso deverá funcionar.

Se você puder postar a estrutura da sua tabela ajudará para podermos saber os campos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo falta referenciar os campos das tabelas que você quer unir. Faça da seguinte forma:





$item = "select * from item INNER JOIN guia ON campo.item = campo.guia ORDER BY itemid DESC, id_guia RAND()";

 

com isso deverá funcionar.

Se você puder postar a estrutura da sua tabela ajudará para podermos saber os campos.

Eu quero pegar todos os campos da tabela item e pegar apenas o campo id_guia e nome_guia da tabela guia para que os patrocinadores sejam mostrados aleatoriamente em cada produto anunciado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou supondo que itemid seja o campo chave-primária da tabela item.

 

Se eu estiver correto, esse tipo de consulta não vai funcionar nunca! Entenda os parâmetros de [inline]ORDER BY[/inline] como se fossem "critérios de desempate".

 

Exemplo: Como funciona ordenação alfabética? Pegamos a primeira letra. E se a primeira letra for igual? Partimos pra segunda e pra terceira e assim por diante.

 

A segunda regra só será avaliada quando houverem dois itemid iguais.

 

Por último, não existe id_guia RAND() o correto é apenas [inline]RAND()[/inline]. Não concorda que ordenar aleatoriamente pelo ID é a mesma coisa que ordenar aleatoriamente por qualquer outro campo? Afinal, é aleatório!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou supondo que itemid seja o campo chave-primária da tabela item.

 

Se eu estiver correto, esse tipo de consulta não vai funcionar nunca! Entenda os parâmetros de [inline]ORDER BY[/inline] como se fossem "critérios de desempate".

 

Exemplo: Como funciona ordenação alfabética? Pegamos a primeira letra. E se a primeira letra for igual? Partimos pra segunda e pra terceira e assim por diante.

 

A segunda regra só será avaliada quando houverem dois itemid iguais.

 

Por último, não existe id_guia RAND() o correto é apenas [inline]RAND()[/inline]. Não concorda que ordenar aleatoriamente pelo ID é a mesma coisa que ordenar aleatoriamente por qualquer outro campo? Afinal, é aleatório!!

realmente Evandro, vc está com razão, pois não to conseguindo de forma alguma fazer isso, e a alternativa, eu acho, seria chamar duas SELECT uma de cada tabela, porém, não sei se é possivel chamar uma select dentro da WHILE de outra, é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ordenar apenas aleatoriamente não serve???

Eu preciso ordenar os campos da tabela item na ordem decrescente e pegar qualquer patrocinador da tabela guia e colocar tipo assim:

Patrocinador por: "nome do patrocinador" q está em outra tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo é possivel realizar outro select dentro de um while. Porém voce realizando duas consultas ao BD em poucos acessos não irá fazer muita diferença na velocidade da consulta mas quando se trata de muitos acessos a coisa muda.

 

Entre estas duas tabela há relacionamento?

Se sim na consulta voce deve fazer esta consulta unindo as colunas, agora se não possui um campo onde sejam iguais nas duas tabelas ai complica, mas vamos a consulta:

Basicamente seria isso, alg:

 

Selecione todos os campos da tabela item unindo a tabela guia onde chave primaria da tabela item é igual a chave estrangeira da tabela guia ordenando por randomico limitando em 15.

 

 

 

 

 

SELECT * FROM item INNER JOIN guia ON item.iditem = guia.iditem ORDER BY RAND() LIMIT 15 

 

 

No caso guia.iditem (tabela.coluna) o iditem é a chave estrangeira da tabela guia apontando para a chave primaria da tabela item e que faz o relacionamento entre as tabelas item e guia:

 

ITEM GUIA

 

iditem <-> iditem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo é possivel realizar outro select dentro de um while. Porém voce realizando duas consultas ao BD em poucos acessos não irá fazer muita diferença na velocidade da consulta mas quando se trata de muitos acessos a coisa muda.

 

Entre estas duas tabela há relacionamento?

Se sim na consulta voce deve fazer esta consulta unindo as colunas, agora se não possui um campo onde sejam iguais nas duas tabelas ai complica, mas vamos a consulta:

Basicamente seria isso, alg:

 

Selecione todos os campos da tabela item unindo a tabela guia onde chave primaria da tabela item é igual a chave estrangeira da tabela guia ordenando por randomico limitando em 15.

 

 

 

 

 

SELECT * FROM item INNER JOIN guia ON item.iditem = guia.iditem ORDER BY RAND() LIMIT 15 

 

 

No caso guia.iditem (tabela.coluna) o iditem é a chave estrangeira da tabela guia apontando para a chave primaria da tabela item e que faz o relacionamento entre as tabelas item e guia:

 

ITEM GUIA

 

iditem <-> iditem

Tiago, obrigado pela explicação, mas as tabelas não possuem relacionamento algum, isso pq os classificados (tabela item) não são relacionados ao nome_guia (tabela guia). O que eu pretendo fazer é com que o site mostre um guia qualquer no produto anunciado, isso apenas para divulgar o patrocinador do site (cadastrado na tabela guia).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu ver se entendi, em determinados momentos apareceria um mesmo item, mas patrocinado por qualquer outro patrocinador, mesmo que eles não estejam relacionados??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, - colocando assim pro Google não associar meu nome ao conteúdo - você vai contar uma mentirinha??

Não, entendam...

 

Meu site vai divulgar classificados de graça, pessoas q queiram vender seus pertences usados ou novos, etc, mas terei um guia comercial, onde patrocinadores divulgarão seus comércios, sendo assim, divulgarei seus comércios nos produtos divulgados de graça no meu site.

por isso são duas tabelas diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize uma subquery

select id, nome, campo, outro_campo, (select id from tabela_de_patrocinadores order by rand() limit 1) as patrocinador from tabela_de_itens;

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho um site proprio de classificados online, eu quero mostrar mais de uma foto do produto, sendo assim, o produto já é cadastro corretamente, assim como as fotos
Numa tabela de produto (item) eu cadastro uma foto principal
TABELA ITEM

 

itemid
produto
foto
tipo
data_cadastro
descricao
condicao
quantidade
preco
seuemail
id_login
por
cliques

TABELA FOTOITEM

 

fotoid
itemid
foto
descfoto
id_login
por

eu chamo o produto nesse código:
mostra_item.php

<?php

  function convertem($term, $tp) {

    if ($tp == "1") $palavra = strtr(strtoupper($term),"àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ","ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß");

    elseif ($tp == "0") $palavra = strtr(strtolower($term),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ");

    return $palavra;

}

$recupera = $_GET['itemid'];

$item = mysql_query("SELECT * FROM item WHERE `itemid` = '$recupera'")

   or die(mysql_error());

if(@mysql_num_rows($item) == '0'){

echo "Nenhum produto cadastrado, seja o primeiro!";

}else{

while($mostra_item=mysql_fetch_array($item))

{

$id = $mostra_item["itemid"];
$produto = $mostra_item["produto"];
$foto = $mostra_item["foto"];
$tipo = $mostra_item["tipo"];
$data = $mostra_item["data_cadastro"];
$usumail = $mostra_item["seuemail"];
$descricao = $mostra_item["descricao"];
$preco = $mostra_item["preco"];
$qtd = $mostra_item["quantidade"];
$condic = $mostra_item["condicao"];
$por = $mostra_item["por"];

?>

<div id="formularios">

<div id="cont_item">
<div class="titproduto"><div class="titprod"><h2><?php echo strtoupper("$produto"); ?></h2></div><div class="btnprod"></div></div>
<img src="produtos/<?php echo $foto; ?>" border="0" width="100%"/>

<div class="blocodesc">
<span class="itemdesc"><span class="itemdesctit">PRODUTO</span><br>
<?php
if ($condic == "NOVO"){
echo "<img src=\"img/ico-novo.png\"/>";
}elseif ($condic == "USADO"){
echo "<img src=\"img/ico-usado.png\"/>";
}elseif ($condic == "SEMI-NOVO"){
echo "<img src=\"img/ico-snovo.png\"/>";
}elseif ($condic == "DEFEITO"){
echo "<img src=\"img/ico-defeito.png\"/>";
}
?>
</span>
<span class="itemdesc"><span class="itemdesctit">PREÇO</span><br><br><?php echo $preco?></span>
<span class="itemdesc"><span class="itemdesctit">CATEGORIA</span><br><br><?php echo strtoupper("$tipo"); ?></span>
<span class="itemdesc"><span class="itemdesctit">POR</span><br><br><?php echo $por; ?></strong></span>

<div id="like">

<div id="fb-root"></div>

<script src="http://connect.facebook.net/pt_BR/all.js#appId=169279313141006&xfbml=1"></script>

<script language="JavaScript" type="text/javascript">

var endereco=(location.href)

document.write('<fb:like href="'+endereco+'" send="true" layout="button_count" width="450" show_faces="true" font="arial"></fb:like>');

</script>

</div>
</div><!--fim bloco desc-->
<br>
<?php echo $descricao; ?>
<br>
POSTADO EM</span><br><?php echo date('d/m/Y', strtotime($mostra_item['data_cadastro'])); ?>

<?php } } ?>

</div><!--fim div cont item-->

quero que mostre onde ta mostrando a imagem principal as outras imagens cadastradas na tabela fotoitem, percebam que nas duas tabelas tem o campo itemid, na tabela ITEM é uma int chave primaria e na tabela FOTOITEM é um char q resgata o id da tabela ITEM
Espero q tem entendido, aguardo resposta e desde já agradeço.

Agora acho q dá pra vcs entenderem ou eu, pode ser q eu não esteja entendendo a explicação dos mais sábios aí. Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.