lucaswxp 22 Denunciar post Postado Outubro 9, 2014 Bom dia, pessoal. Eu estou com um problema que a início achei que seria simples de se resolver, mas não estou conseguindo. Tenho as seguintes tabelas: users table id INT name VARCHAR admins table id name VARCHAR Eu preciso fazer um select nas duas tabelas e ordenar os resultados intercaladamente. Ou seja, eu preciso que para cada 10 registros da tabela users, apareça 1 registro da tabela admins. O Resultado do select ficando algo como: ---------------------------------- id, name, type ---------------------------------- 1, Fulano, user 2, Fulano, user 3, Fulano, user 4, Fulano, user 5, Fulano, user 6, Fulano, user 7, Fulano, user 8, Fulano, user 9, Fulano, user 10, Fulano, user 1, Sicrano, admin 11, Fulano, user 12, Fulano, user ..... O que eu já tentei: SET @number := 0; SELECT @number := IF(@number = 10, 10, @number+1) AS number, id, name, 'user' AS type FROM users UNION SELECT @number := 0 AS number, id, name, 'admin' AS type FROM admins ORDER BY IF(number = 10, type = 'admin', type = 'user') DESC; Eu sei que a lógica está errada e algo faltando, mas não consigo descobrir a solução. Alguém tem alguma luz? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 9, 2014 gere sequencias separdas paras as tabelas 1 2 3 4 9 10 11 12 1 2 3 4 9 10 11 12 Faça o "trunc) por 11 1 0 2 0 3 0 4 0 9 0 10 0 11 1 12 1 Use este trunc para ordenar Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Outubro 9, 2014 Motta, não entendi. Pode elaborar? Abs Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 9, 2014 --1 select 'u' table,id,name from USERS union select 'a' table,id,name from admins --2 select 'u' table,round(id/10) x,name from USERS union select 'a' table,round(id/10) x,name from admins --3 select x , table, name from (select 'u' table,ROUND(id/10) X,name from USERS union select 'a' table,ROUND(id/10) X,name from ADMINS ) VIRTUAL order by x , table, name Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Outubro 9, 2014 Obrigado pelo feedback, Motta! Só não entendi a lógica do que você tentou fazer, nem consegui fazer seu exemplo funcionar. Não posso usar o ID como referência ao número do registro, a coluna não é sequencial ou pode nem mesmo ser numérica, só usei como exemplo. (por isso setei a variável no começo do meu exemplo) Também não vejo como a divisão deveria resultar na ordenação correta. Eu tentei utilizar o operador de módulo (%) em outras tentativas, mas também não consegui resultado algum. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 9, 2014 Supos um campo ordenado . Dividindo por dez e arredondando temos grupos sequenciais. Não tive como testar mas creio que funcione. Compartilhar este post Link para o post Compartilhar em outros sites