Testei agora no localhost, com o MariaDB, e funcionou perfeitamente.
Então, o problema deve ser mesmo a versão do MySQL do provedor.
Vou providenciar a substituição.
dúvida em select: resultado zero
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
dúvida em select: resultado zero
Só voltando um pouco
Isso é até exagerado, mas muito interessante.
são 5 tabelas de 0 a 9.
Está sendo feito o JOIN, o que vai gerar a combinação de 99999 registros.
A fórmula é o que vai transformar isso em números de 0 a 99999, e somar à data de 1/1/1970, gerando uma sequência de 9.999 datas.
Traduzindo em Harbour:
Pois é... acabou fazendo FOR/NEXT do "jeito tabela".
Fez operação com tabelas, que resultaram numa tabela com 9.999 datas, e selecionou as datas que interessavam.
NÃO SEI se compensaria fazer cada tabela de 1 em 1, 10 em 10, 100 em 100, e transformar a fórmula em apenas soma.
Se fizer diferença, talvez milésimos de segundo.
Mas é muito interessante.
É o que já conhecemos, mas fazendo com o recurso que está disponível no SQL, que é operação com tabelas.
E nem dá pra dizer que é coisa nova: aprendemos na escola sobre operações assim, só não lembro qual era o nome, lembro vagamente sobre união, intersecção, e coisas do tipo.
Código: Selecionar todos
select * from
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) gen_date from
(select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where gen_date between '2017-01-01' and '2017-12-31'
são 5 tabelas de 0 a 9.
Está sendo feito o JOIN, o que vai gerar a combinação de 99999 registros.
A fórmula é o que vai transformar isso em números de 0 a 99999, e somar à data de 1/1/1970, gerando uma sequência de 9.999 datas.
Traduzindo em Harbour:
Código: Selecionar todos
FOR nDigito1 = 0 TO 9
FOR nDigito2 = 0 TO 9
FOR nDigito3 = 0 TO 9
FOR nDigito4 = 0 TO 9
FOR nDigito5 = 0 TO 9
? Stod( "19700101" ) + ;
( nDigito1 * 10000 ) + ;
( nDigito2 * 1000 ) + ;
( nDigito3 * 100 ) + ;
( nDigito4 * 10 ) + ;
nDigito5
NEXT
NEXT
NEXT
NEXT
NEXT
Fez operação com tabelas, que resultaram numa tabela com 9.999 datas, e selecionou as datas que interessavam.
NÃO SEI se compensaria fazer cada tabela de 1 em 1, 10 em 10, 100 em 100, e transformar a fórmula em apenas soma.
Se fizer diferença, talvez milésimos de segundo.
Mas é muito interessante.
É o que já conhecemos, mas fazendo com o recurso que está disponível no SQL, que é operação com tabelas.
E nem dá pra dizer que é coisa nova: aprendemos na escola sobre operações assim, só não lembro qual era o nome, lembro vagamente sobre união, intersecção, e coisas do tipo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
dúvida em select: resultado zero
Isso é interessante pra outra coisa também:
Uma operação com 5 tabelas de 10 registros gerou 99999 registros.
Se não tomar cuidado, é isso que pode acontecer com nossas pesquisas.
Mesmo que o resultado final seja trazer pouca informação pro terminal, o processo no servidor poderia fazer isso durante o processamento.
O processo acima parece gerar 99.999 registros com muitos inúteis, mas é rápido.
Acho que é porque a parte inútil já vai sendo descartada pelo WHERE, e acaba nem fazendo parte da tabela.
Pois é... só resta ir acostumando com essa "nova" forma de processar as coisas, e analisar cada caso.
E lembrando: pode ser diferente de uma base de dados SQL pra outra, cada um vai acabar tendo que fazer seus próprios testes.
Nota:
Pra mim isso tudo também é novidade.
Só estou tentando enxergar/entender o que está na frente do meu nariz, comparando com alguma coisa conhecida.
Uma operação com 5 tabelas de 10 registros gerou 99999 registros.
Se não tomar cuidado, é isso que pode acontecer com nossas pesquisas.
Mesmo que o resultado final seja trazer pouca informação pro terminal, o processo no servidor poderia fazer isso durante o processamento.
O processo acima parece gerar 99.999 registros com muitos inúteis, mas é rápido.
Acho que é porque a parte inútil já vai sendo descartada pelo WHERE, e acaba nem fazendo parte da tabela.
Pois é... só resta ir acostumando com essa "nova" forma de processar as coisas, e analisar cada caso.
E lembrando: pode ser diferente de uma base de dados SQL pra outra, cada um vai acabar tendo que fazer seus próprios testes.
Nota:
Pra mim isso tudo também é novidade.
Só estou tentando enxergar/entender o que está na frente do meu nariz, comparando com alguma coisa conhecida.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
dúvida em select: resultado zero
Um décimo de segundo pra operação com 100.000 datas.
O comando é doido?
Com essa velocidade.. nem importa que seja doido... kkk
O comando é doido?
Com essa velocidade.. nem importa que seja doido... kkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
dúvida em select: resultado zero
E aproveitando... um CTEzinho... mas a outra opção usando recursivo parece melhor.
Aqui é apenas pra mostrar o CTE criando a tabela a, que acabou sendo usada 5 vezes depois.
Código: Selecionar todos
WITH a as ( select 0 as x union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 )
SELECT * FROM
( select adddate('1970-01-01',a.x*10000 + b.x*1000 + c.x*100 + d.x*10 + e.x) as gen_date
FROM
a, a AS b, a AS C, a AS d, a AS e
) AS x
where gen_date between '2017-01-01' and '2017-12-31'
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
dúvida em select: resultado zero
Recursivo é muuuito melhor, porque acaba trabalhando só com o intervalo de datas que interessa, ao invés de 100.000 datas.JoséQuintas escreveu:mas a outra opção usando recursivo parece melhor.
Não que 1 décimo de segundo seja problema, mas... nunca se sabe o que vém pela frente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
dúvida em select: resultado zero
Olá!
Foi com base na Teoria dos conjuntos e na Álgebra relacional que o britânico Edgar Frank Codd criou a Linguagem SQL, no início dos anos 70, nos laboratórios da IBM em San Jose, Califórnia, EUA.JoséQuintas escreveu:aprendemos na escola sobre operações assim, só não lembro qual era o nome, lembro vagamente sobre união, intersecção, e coisas do tipo
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
