tiagocaus 1 Denunciar post Postado Agosto 28, 2014 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
lokaodomau 61 Denunciar post Postado Agosto 28, 2014 Não entendi, tem como explicar esse seu código? Por que tantas sub-querys? Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Agosto 28, 2014 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
lokaodomau 61 Denunciar post Postado Agosto 28, 2014 Citando o @Motta neste post, eu tentaria normalizar a tabela... Entendendo o raciocínio deste campo TEXT, poderíamos chegar a alguma solução. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 29, 2014 Normalize a tabela. Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Agosto 29, 2014 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
lokaodomau 61 Denunciar post Postado Agosto 29, 2014 O que significa esta data? Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Agosto 29, 2014 Veja online: Estou tentando: http://sqlfiddle.com/#!2/1729fd/17 Funcionando: http://sqlfiddle.com/#!2/f9723/20 Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 29, 2014 Formas Normais Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Agosto 29, 2014 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
lokaodomau 61 Denunciar post Postado Agosto 29, 2014 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
tiagocaus 1 Denunciar post Postado Agosto 29, 2014 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