Ir para conteúdo

POWERED BY:

Arquivado

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

Hanover

Ordenar Por Data 2 Valores Em Um Unico Select.

Recommended Posts

Olá.

Queria ouvir a sugestão de alguém antes de ter que recorrer ao php pra fazer isso.

 

Tenha duas tabelas.

 

- Noticia (id, titulo, data)

- Artigo (id, titulo, data)

 

Quero listar os 5 ultimos artigos ou noticias adicionados no sistema.

Na verdade eu tentei listar por id, mas eu me embananei no order by.

"SELECT n.id, n.titulo, n.data, n.id, n.titulo, n.data FROM tab_noticia AS n, tab_artigo AS a ORDER BY id DESC LIMIT 0,5"

Se alguem tiver alguma sugestão, agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não me engano...select *from (select id, titulo, data from noticia order by id desc limit 5 ) as consulta1unionselect *from (select id, titulo, data from artigo order by id desc limit 5 ) as consulta2Explicando... voce "junta" com o "union" duas consultas distintas (a "consulta1" com a "consulta2")...Essas consultas tem que resultar em colunas com o mesmo nome...O "desc" é para colocar em ordem decrescente... primeiro as notícias mais recentes... e o "limit" para limitar em no máximo cinco linhas cada consulta...Espero que dê certo...Ok?(não esquece de marcar como [resolvido] se funcionar!)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não deu muito certo porque eu esqueci de uns detalhes.P - E se a noticia e artigo tiverem o mesmo id?R - A gente diferencia por data.P - E elas foram cadastradas na mesma data?R - A gente diferencia pela hora.P - E se elas foram cadastradas na mesma hora, minuto e segundo?R - Ai eu submeto qualquer uma das duas para ser listada primeiro. Noticias, por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... se você partir do princípio de que o "id" deveria ser um campo AUTOINCREMENTO, ele será sempre mais recente quanto maior for seu conteúdo...Outra coisa... se, ainda, o "id" for AUTOINCREMENTO (e deveria ser), cada tabela tem seu próprio "id"... então, nunca haverá problema de coincidência, pois os selects são feitos separadamente...Claro, a query resultante pode ser ordada por data, ou por hora também... sem problemas...Ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você não compreendeu.

 

<?php	//pega 5 resultados do banco ordenando-os por data e hora	$qry_dados = "SELECT tn.id AS id_noticia, tn.titulo AS titulo_noticia, ta.id AS id_artigo, ta.titulo AS titulo_artigo FROM tab_noticia tn, tab_artigo ta ORDER BY data DESC, hora DESC LIMIT 0,5";	// faz a consulta	$res_dados = mysql_query($qry_dados, $conn) or die("Erro listar:".mysql_error());	// caso retornem dados	if ($res_dados && mysql_num_rows($res_dados)){ 		// entra no loop		while ($row_dados = mysql_fetch_array($res_dados)) {{ 			// se id_artigo estiver em branco é porque o campo mais recente é uma noticia			if ($row_dados['id_artigo'] == "") { ?> 				<a href="noticia.php?id=<?php echo $row_dados['id']; ?>"><?php echo $row_dados['titulo']; ?></a>			<?php } else { ?> // se não é um artigo			 	<a href="artigo.php?id=<?php echo $row_dados['id']; ?>"><?php echo $row_dados['titulo']; ?></a>			<?php } 		}} ?> // fim do loop	<?php } else { ?> // caso a pesquisa nao encontre resultados		<strong>Sua busca foi pro espaço!</strong>	<?php } ?>
Eu pensei que essa solução daria certo, mas o php retorna um erro:

 

Erro listar:Column 'data' in order clause is ambiguous

 

Ou seja, esse criterio da busca pra poder ordenar por data é que ta dando pau.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro listar:Column 'data' in order clause is ambiguousNão é um erro do php... O MySQL esta avisando que a coluna data está presente em mais de uma tabela... assim, ele não consegue "advinhar" de qual tabela irá pegar o valor que você quer...Novamente, se você tem uma tabela na qual existe um campo AUTOINCREMENTO, SEMPRE os maiores valores serão os MAIS recentes...Assim, somente o resultado da junção das duas tabelas precisaria ser ordernado por data e hora...Ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php	//pega 5 resultados do banco ordenando-os por data e hora	$qry_dados = "SELECT tn.id AS id_noticia, tn.titulo AS titulo_noticia, ta.id AS id_artigo, ta.titulo AS titulo_artigo FROM tab_noticia tn, tab_artigo ta ORDER BY data DESC, hora DESC LIMIT 0,5";	// faz a consulta	$res_dados = mysql_query($qry_dados, $conn) or die("Erro listar:".mysql_error());	// caso retornem dados	if ($res_dados && mysql_num_rows($res_dados)){ 		// entra no loop		while ($row_dados = mysql_fetch_array($res_dados)) {{ 			// se id_artigo estiver em branco é porque o campo mais recente é uma noticia			if ($row_dados['id_artigo'] == "") { ?> 				<a href="noticia.php?id=<?php echo $row_dados['id']; ?>"><?php echo $row_dados['titulo']; ?></a>			<?php } else { ?> // se não é um artigo			 	<a href="artigo.php?id=<?php echo $row_dados['id']; ?>"><?php echo $row_dados['titulo']; ?></a>			<?php } 		}} ?> // fim do loop	<?php } else { ?> // caso a pesquisa nao encontre resultados		<strong>Sua busca foi pro espaço!</strong>	<?php } ?>
Eu pensei que essa solução daria certo, mas o php retorna um erro:

 

Erro listar:Column 'data' in order clause is ambiguous

 

Bem.. é só especificar de qual tabela você esta pegado o valor data

 

exeplo:

 

 

<?php	//pega 5 resultados do banco ordenando-os por data e hora	$qry_dados = "SELECT tn.id AS id_noticia, tn.titulo AS titulo_noticia, ta.id AS id_artigo, ta.titulo AS titulo_artigo FROM tab_noticia tn, tab_artigo ta ORDER BY [b]tn[/b].data DESC, [b]tn[/b].hora DESC LIMIT 0,5";	// faz a consulta	$res_dados = mysql_query($qry_dados, $conn) or die("Erro listar:".mysql_error());	// caso retornem dados	if ($res_dados && mysql_num_rows($res_dados)){ 		// entra no loop		while ($row_dados = mysql_fetch_array($res_dados)) {{ 			// se id_artigo estiver em branco é porque o campo mais recente é uma noticia			if ($row_dados['id_artigo'] == "") { ?> 				<a href="noticia.php?id=<?php echo $row_dados['id']; ?>"><?php echo $row_dados['titulo']; ?></a>			<?php } else { ?> // se não é um artigo			 	<a href="artigo.php?id=<?php echo $row_dados['id']; ?>"><?php echo $row_dados['titulo']; ?></a>			<?php } 		}} ?> // fim do loop	<?php } else { ?> // caso a pesquisa nao encontre resultados		<strong>Sua busca foi pro espaço!</strong>	<?php } ?>
Tem de epecificar de qual tabela eh o campo 'data'..

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.