Ir para conteúdo

POWERED BY:

Arquivado

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

tiagocaus

Condição para exibir.

Recommended Posts

Boa tarde,

 

Como faço para que esse código abaixo consiga mostrar somente os valores onde ?ID_Celula=2, será recebido via GET, mas nesse exemplo coloquei o numero direto. É que estou tentando, mas sem sucesso.?

SELECT ID_Celula, YEAR(date) AS year, MONTH(date) AS month, COUNT(*) AS 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
    WHERE YEAR(date) = '".date("Y")."' && MONTH(date) = '".$m1Mes."' && ID_Celula = '2' GROUP BY YEAR(date), MONTH(date)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

Esta separando, por data e contado.

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');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Normalizar o que, não entendo esse termo. O código postado funciona 99% de como preciso, somente falta fazer uma condição para mostrar pelo ID informando pelo GET.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, eu faria isso se foce possível, mas nem sempre é, por isso precisei fazer o que fiz. Estou conseguindo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, mas a melhor alternativa é a normalização.

SELECT ID_Celula, YEAR(date) AS year, MONTH(date) AS month, COUNT(*) AS count
      FROM
    (
      SELECT ID_Celula,
             SUBSTRING_INDEX(value, ':', 1) id, 
             CAST(SUBSTRING_INDEX(value, ':', -1) AS DATE) date
        FROM
      (
        SELECT ID_Celula, 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
    WHERE YEAR(date) = '2014' && MONTH(date) = '08' && ID_Celula = '2' GROUP BY YEAR(date), MONTH(date)

O que estava faltando é informar o campo ID_Celula desde a sub-query onde foi resultado as informações da tabela celula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, mesmo, eu tinha conseguido aqui alguns segundo antes de mandar...rsrs, fazer as coisas de cabaça cheia não é bom...rs

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.