Tenho uma tabela com 4 colunas: id (int), name (varchar), timefrom (time), timeuntil (time)
Agora eu gostaria de ter todas as combinações onde elas têm uma interseção no tempo de para o tempo até.
Minha solução atual é carregar todos os registros e fazer um loop em php a cada hora inteira ... mas isso me custa muito desempenho.
Alguma ideia, isso é possível resolver em um Select?
Quero saber quais presenças estão compartilhando o mesmo timefrom, timeuntil Por exemplo:
#1 / whole day / 06:00:00 / 18:00:00
#2 / morning / 07:00:00 / 12:00:00
#3 / afternoon / 13:00:00 / 18:00:00
gostaria de ter o resultado:
#1, #2, #3 (the whole day shares the times with morning, afternoon)
#2, #1 (the morning shares the times with the whole day)
#3, #1 (the afternoon shares the times with the whole day)
Parece que você precisa de uma junção automática com uma condição de não igualdade que verifique os intervalos sobrepostos. A saída pode estar em diferentes formatos. Dependendo de suas necessidades, o mais fácil seria uma saída de 2 colunas:
A saída seria (2 colunas):
Para obter as linhas combinadas, você pode usar
GROUP_CONCAT()
:Saída (2 colunas):
Se você quiser uma linha por
a.id
e várias colunas, precisará de um SQL dinâmico.