Ir para conteúdo

Arquivado

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

tiagocaus

Separar e mostrar somente data

Recommended Posts

CREATE TABLE `celula` (
  `ID_Celula` int(255) unsigned NOT NULL AUTO_INCREMENT,
  `integrantes` text,
  PRIMARY KEY (`ID_Celula`)
);

INSERT INTO `celula` (`ID_Celula`, `integrantes`) VALUES
(1, '2:2014-08-13,4:2014-08-13,6:2014-08-13,7:2014-08-13'),
(2, '3:2014-08-13,5:2014-08-13,6:2014-08-13');

Como eu faço para mostrar somente a data da coluna integrantes?

 

Teste online http://sqlfiddle.com/#!2/1729fd

 

 

Agradeço qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Buenas tchê.

 

Mais ou menos isso?

select substring_index(integrantes, ':', -1) from celula

 

Sim, mas precisa mostrar todas as datas, veja como ficou http://sqlfiddle.com/#!2/1729fd/4

 

Sabe como fazer para mostrar tudo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma sugestão somente se este projeto estiver sendo implementado, pois se houver muitos registros, pode ser meio complicado o ajuste...

 

Use esta tabela apenas para descrição da célula e crie uma outra tabela ligando os integrantes á célula, desta forma:

CREATE TABLE celula_x_integrantes (
  id_celula int(255) unsigned NOT NULL,
  id_integrante int(255) unsigned NOT NULL,
  horario_inclusao DATE NULL,
  PRIMARY KEY (id_celula, id_integrante)
);

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Uma sugestão somente se este projeto estiver sendo implementado, pois se houver muitos registros, pode ser meio complicado o ajuste...

 

Use esta tabela apenas para descrição da célula e crie uma outra tabela ligando os integrantes á célula, desta forma:

CREATE TABLE celula_x_integrantes (
  id_celula int(255) unsigned NOT NULL,
  id_integrante int(255) unsigned NOT NULL,
  horario_inclusao DATE NULL,
  PRIMARY KEY (id_celula, id_integrante)
);

 

O problema que a tabela já existe e tem muitos outros campos, coloquei aqui de forma simplificada para melhor visualização.

 

É um recurso novo que estou tentando criar,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentaria normalizar a tabela, para obter uma informação simples como uma data veja a "volta" que teve de ser dada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que essa tabela é antiga, e os clientes tem muitos registros nela. Eu estou tentando pensar em algo, sem a necessidade de desestruturar a tabela. Esse código exige, mas não todas as datas http://sqlfiddle.com/#!2/1729fd/4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, como ao menos tem uma estrutura facilita com o uso de FUNCTIONS de STRING , SUBSTR , INSTR ETC...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não estou sabendo como resolver esse problema.

 

A ideia é pegar todas a datas, agrupar pelo mês. Quero montar um grafico.

series: [{
            data: [7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
        }]

HZN2EKX.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que este objeto de gráfico aceita receber !?

 

Um array ? Ou tem de ser um objeto de BD ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o valor que conseguir pegar do BD irei montar o grafico.

 

Com o select montado eu montaria um função onde iria informar somente o mes para pegar o valor.

function m1($mes){
}

echo m1('08');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazer com a ajuda de um amigo. Para quem tiver o mesmo problema, veja a solução:

SELECT YEAR(date) year, MONTH(date) month, COUNT(*) count
  FROM
(
  SELECT SUBSTRING_INDEX(value, ':', 1) id, 
         CAST(SUBSTRING_INDEX(value, ':', -1) AS DATE) date
    FROM
  (
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(integrantes, ',', n), ',', -1) value
      FROM celula CROSS JOIN 
    (
      SELECT a.N + b.N * 10 + 1 n
      FROM 
      (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
     ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ) tally
     WHERE  n <= 1 + (LENGTH(integrantes) - LENGTH(REPLACE(integrantes, ',', '')))
  ) q 
) o
GROUP BY YEAR(date), MONTH(date)

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.