stview 0 Denunciar post Postado Agosto 18, 2010 Estou tentando criar uma visualização semelhante a que o flickr e outros sites utilizam: Quando estou vendo uma foto, mantenho uma lista com mais fotos ao lado numa "galeria", e a foto atual sempre fica no meio da listagem, com 2 ou 3 pra cada lado. Mas estou tentando fazer essa consulta no banco e não estou conseguindo. Exemplo: Tenho os ids: 1, 2, 3, 10, 11, 12, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30. O id atual é o 21, e quermo mostrar 5 pra cada lado, logo preciso montar um select que me retorne os ids: 2,3,10,11,12,21,22,23,24,25,26 Compartilhar este post Link para o post Compartilhar em outros sites
Douglas 6 Denunciar post Postado Agosto 18, 2010 Já tentou utilizar subselects? Compartilhar este post Link para o post Compartilhar em outros sites
stview 0 Denunciar post Postado Agosto 18, 2010 Pensei em usar subqueries, mas ainda não consegui desenvolver o raciocínio sobre como buscar... Tem alguma idéia? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 18, 2010 Uma solução para Oracle (que talvez possa ser adaptada) SELECT B.* FROM ( SELECT T.*,ROWNUM SEQ FROM TABELA T ) A, ( SELECT T.*,ROWNUM SEQ FROM TABELA T ) B WHERE (A.ID = '21' AND B.SEQ BETWEEN A.SEQ-2 AND A.SEQ+2) ROWNUM é uma pseudocoluna que numera sequenciamente o result set. Compartilhar este post Link para o post Compartilhar em outros sites
stview 0 Denunciar post Postado Agosto 18, 2010 Eu nunca trabalhei com oracle, mas buscando na web só achei que não existe nada similar a ROWNUM para mysql. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 18, 2010 http://blog.filipesilva.name/2008/12/numero-da-linha-rownum-no-mysql/ http://jimlife.wordpress.com/2008/09/09/displaying-row-number-rownum-in-mysql/ Compartilhar este post Link para o post Compartilhar em outros sites
stview 0 Denunciar post Postado Agosto 18, 2010 Certo, mas eu ainda não entendi bem o conceito dele. Você poderia explicar um pouco como funciona? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 18, 2010 Não manjo MySql mas faça a ideia do cara select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;ou como uma view, ou como uma tabela. +ou- isto ... SELECT B.* FROM ( SELECT T.*,ROWNUM SEQ FROM (select @rownum:=@rownum+1 ‘rownum’, p.* from player p, (SELECT @rownum:=0) r order by score) T ) A, ( SELECT T.*,ROWNUM SEQ FROM (select @rownum:=@rownum+1 ‘rownum’, p.* from player p, (SELECT @rownum:=0) r order by score) T ) B WHERE (A.ID = '21' AND B.SEQ BETWEEN A.SEQ-2 AND A.SEQ+2) O rownum no Oracle é uma pseudocoluna que monta um sequencial das linhas do resultado, muito útil em alguns casos. Pelo que vi MySql não tem nada parecido, mas aquelas soluções simulam o rownum. Mas não perca o foco, talvez exista uma outra solução para o problema original (listar o intervalo) via MySql. Compartilhar este post Link para o post Compartilhar em outros sites
VascoDaGama 2 Denunciar post Postado Agosto 19, 2010 trabalho com oracle e mysql. no mysql usa-se a instrução LIMIT e dependendo do caso tb usa a função COUNT() no caso do autor do tópico é relativamente simples segundoo que entendi SELECT id FROM table WHERE id = 21 query simples que retornará o row do registro cujo id é 21 agora, como extrair os 5 registros anteriores ao id 21, comparando-se o id e retornando sob mesma consulta ? SELECT id FROM table WHERE id <= 21 LIMIT 6 LIMIT 6 -> limitará a consulta até 6 resultados ( six rows ). Ou seja, o id 21 + 5 rows anteriores, condicionados por "WHERE id <= 21" como obter os registros posteriores ao id 21 ? mantendo a mesma query acima, adicione "UNION" SELECT id FROM table WHERE id <= 21 LIMIT 6 UNION SELECT id FROM table WHERE id > 21 LIMIT 11 LIMIT 11 -> deve ser 11 porque é somatizado a quantidade de rows da consulta da query anterior, logo, 6 + 5 = 11. Ao total devem retornar no máximo 11 rows. há outras formas de fazer isso, mas por aí você já pode ter uma base. espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
stview 0 Denunciar post Postado Setembro 6, 2010 Hummm, nem pensei no UNION, me parece que vai funcioanr, bem simples essa solução Valeu! Compartilhar este post Link para o post Compartilhar em outros sites