Ir para conteúdo

Arquivado

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

lucaswxp

Intercalando resultados de tabelas diferentes

Recommended Posts

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

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

--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

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

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

×

Informação importante

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