Hanover 0 Denunciar post Postado Setembro 11, 2007 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
Paulo do Brasil 0 Denunciar post Postado Setembro 11, 2007 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
Hanover 0 Denunciar post Postado Setembro 11, 2007 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
Paulo do Brasil 0 Denunciar post Postado Setembro 11, 2007 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
Hanover 0 Denunciar post Postado Setembro 11, 2007 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
Paulo do Brasil 0 Denunciar post Postado Setembro 12, 2007 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
afonsoft 0 Denunciar post Postado Setembro 26, 2007 <?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