Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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)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');Citando o @Motta neste post, eu tentaria normalizar a tabela...
Entendendo o raciocínio deste campo TEXT, poderíamos chegar a alguma solução.
Normalize a tabela.
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.
O que significa esta data?
Veja online:
Estou tentando: http://sqlfiddle.com/#!2/1729fd/17
Funcionando: http://sqlfiddle.com/#!2/f9723/20
Entendi, eu faria isso se foce possível, mas nem sempre é, por isso precisei fazer o que fiz. Estou conseguindo...
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.
Isso, mesmo, eu tinha conseguido aqui alguns segundo antes de mandar...rsrs, fazer as coisas de cabaça cheia não é bom...rs
Não entendi, tem como explicar esse seu código? Por que tantas sub-querys?