Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Consulta usando Swhit de mysql

Estas en el tema de Consulta usando Swhit de mysql en el foro de Mysql en Foros del Web. buenas noches amigo, como estan, necesito que me peudan echar una ayuda por favor, respecto a una consulta que deseo realizar, donde necesito obtener los ...
  #1 (permalink)  
Antiguo 22/07/2017, 01:55
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Exclamación Consulta usando Swhit de mysql

buenas noches amigo, como estan, necesito que me peudan echar una ayuda por favor, respecto a una consulta que deseo realizar, donde necesito obtener los meses con status 1 y 2 de una tabla, e tratado usando case pero el problema es que necesito trabajarlo con alias, y en este caso solamente me toma el primer CASE y no el segundo, e aqui el codigo

Código Mysql:
Ver original
  1. SELECT est.codest AS id, GROUP_CONCAT(DISTINCT est.cedest) AS cedula, GROUP_CONCAT(DISTINCT est.pnomest) AS pNombre, GROUP_CONCAT(DISTINCT est.snomest) AS sNombre, GROUP_CONCAT(DISTINCT est.papeest) AS pApellido, GROUP_CONCAT(DISTINCT est.sapeest) AS sApellido, COUNT(pag.mespago) AS totalpagad,
  2.        
  3.         CASE pag.statuspago
  4.         WHEN 1 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END AS meses,
  5.         CASE pag.statuspago
  6.         WHEN 2 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END  AS mesesvenc,
  7.        
  8. pag.becado, pag.montopago, pag.codnivel, pag.codgrado, pag.codturno, pag.codperiodo, pagospormora.cantmora, niveles.nivel, grados.grado, grados.seccion, turnos.turno, padres.cedpadre, padres.nompadre, padres.apepadre, periodoescolar.periodo, periodoescolar.mesesactivos, periodoescolar.interesmora FROM estudiantes est INNER JOIN pagos pag ON est.codest = pag.codest INNER JOIN padres ON padres.cedpadre = est.cedpadre INNER JOIN turnos ON turnos.codturno = pag.codturno INNER JOIN niveles ON niveles.codnivel = pag.codnivel INNER JOIN grados ON grados.codgrado = pag.codgrado INNER JOIN periodoescolar ON periodoescolar.codperiodo = pag.codperiodo LEFT JOIN pagospormora ON pagospormora.numcomprobante = pag.numcomprobante WHERE est.cedest = ? AND pag.codperiodo = ? AND (pag.statuspago = '1' OR pag.statuspago = '2') GROUP BY id

Última edición por gnzsoloyo; 24/07/2017 a las 20:09
  #2 (permalink)  
Antiguo 22/07/2017, 09:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta usando Swhit de mysql

prueba con algo como esto:

Código MySQL:
Ver original
  1. $sql ="SELECT est.codest AS id, GROUP_CONCAT(DISTINCT est.cedest) AS cedula, GROUP_CONCAT(DISTINCT est.pnomest) AS pNombre, GROUP_CONCAT(DISTINCT est.snomest) AS sNombre, GROUP_CONCAT(DISTINCT est.papeest) AS pApellido, GROUP_CONCAT(DISTINCT est.sapeest) AS sApellido, COUNT(pag.mespago) AS totalpagad,
  2.        
  3.        CASE pag.statuspago
  4.        WHEN 1 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END AS meses,
  5.        WHEN 2 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END  AS mesesvenc,
  6.        
  7. pag.becado, pag.montopago, pag.codnivel, pag.codgrado, pag.codturno, pag.codperiodo, pagospormora.cantmora, niveles.nivel, grados.grado, grados.seccion, turnos.turno, padres.cedpadre, padres.nompadre, padres.apepadre, periodoescolar.periodo, periodoescolar.mesesactivos, periodoescolar.interesmora FROM estudiantes est INNER JOIN pagos pag ON est.codest = pag.codest INNER JOIN padres ON padres.cedpadre = est.cedpadre INNER JOIN turnos ON turnos.codturno = pag.codturno INNER JOIN niveles ON niveles.codnivel = pag.codnivel INNER JOIN grados ON grados.codgrado = pag.codgrado INNER JOIN periodoescolar ON periodoescolar.codperiodo = pag.codperiodo LEFT JOIN pagospormora ON pagospormora.numcomprobante = pag.numcomprobante WHERE est.cedest = ? AND pag.codperiodo = ? AND (pag.statuspago = '1' OR pag.statuspago = '2') GROUP BY id";
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/07/2017, 19:23
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

muchas gracias por responder amigo, pero da error, ya que no se puede usar alias antes del END, segun lo que e leido
  #4 (permalink)  
Antiguo 23/07/2017, 18:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta usando Swhit de mysql

sorry error de mi lado:

Código MySQL:
Ver original
  1. $sql ="SELECT est.codest AS id, GROUP_CONCAT(DISTINCT est.cedest) AS cedula, GROUP_CONCAT(DISTINCT est.pnomest) AS pNombre, GROUP_CONCAT(DISTINCT est.snomest) AS sNombre, GROUP_CONCAT(DISTINCT est.papeest) AS pApellido, GROUP_CONCAT(DISTINCT est.sapeest) AS sApellido, COUNT(pag.mespago) AS totalpagad,
  2.        
  3.        CASE pag.statuspago
  4.        WHEN 1 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END AS meses,
  5.   CASE pag.statuspago
  6.        WHEN 2 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END  AS mesesvenc,
  7.        
  8. pag.becado, pag.montopago, pag.codnivel, pag.codgrado, pag.codturno, pag.codperiodo, pagospormora.cantmora, niveles.nivel, grados.grado, grados.seccion, turnos.turno, padres.cedpadre, padres.nompadre, padres.apepadre, periodoescolar.periodo, periodoescolar.mesesactivos, periodoescolar.interesmora FROM estudiantes est INNER JOIN pagos pag ON est.codest = pag.codest INNER JOIN padres ON padres.cedpadre = est.cedpadre INNER JOIN turnos ON turnos.codturno = pag.codturno INNER JOIN niveles ON niveles.codnivel = pag.codnivel INNER JOIN grados ON grados.codgrado = pag.codgrado INNER JOIN periodoescolar ON periodoescolar.codperiodo = pag.codperiodo LEFT JOIN pagospormora ON pagospormora.numcomprobante = pag.numcomprobante WHERE est.cedest = ? AND pag.codperiodo = ? AND (pag.statuspago = '1' OR pag.statuspago = '2') GROUP BY id";

Prueba con ese
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 23/07/2017, 19:19
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

muchas gracias por responder y sigue sin funcionar amigo, no me ejecuta el segundo case, me muestra en null todos los registros
  #6 (permalink)  
Antiguo 24/07/2017, 09:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta usando Swhit de mysql

y si tienes registros con los valores 1 y 2? podrias poner un ejemplo de tus datos?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 24/07/2017, 14:41
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

si amigo, e revisado y tengo datos con status 1 y 2
  #8 (permalink)  
Antiguo 24/07/2017, 14:43
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

si puedes mira aqui como sale la consulta http://www.subeimagenes.com/img/capture-1758874.html
  #9 (permalink)  
Antiguo 24/07/2017, 14:51
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

cuando hago la consulta asi

Código PHP:
Ver original
  1. $sql ="SELECT est.codest AS id, GROUP_CONCAT(DISTINCT est.cedest) AS cedula, GROUP_CONCAT(DISTINCT est.pnomest) AS pNombre, GROUP_CONCAT(DISTINCT est.snomest) AS sNombre, GROUP_CONCAT(DISTINCT est.papeest) AS pApellido, GROUP_CONCAT(DISTINCT est.sapeest) AS sApellido,
  2. CASE pag.statuspago WHEN 2 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END AS mesesvenc FROM estudiantes est INNER JOIN pagos pag ON est.codest = pag.codest WHERE pag.statuspago = '2' GROUP BY id";

me muestra esta consulta http://www.subeimagenes.com/img/capture2-1758876.html
  #10 (permalink)  
Antiguo 24/07/2017, 15:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta usando Swhit de mysql

en esos pantallazos no pones los campos sobre los que estas filtrando, asi que esa informacion no me sirve
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 24/07/2017, 15:13
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

estan son las dos tablas con q trabajo

--
-- Estructura de tabla para la tabla `estudiantes`
--

CREATE TABLE `estudiantes` (
`codest` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`cedpadre` varchar(20) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`cedest` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`pnomest` varchar(40) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`snomest` varchar(40) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`papeest` varchar(40) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`sapeest` varchar(40) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`sexoest` varchar(10) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`direcest` text COLLATE utf8_unicode_ci NOT NULL,
`fnacest` date NOT NULL,
`coddoc` int(11) NOT NULL,
`codnivel` int(11) NOT NULL,
`codgrado` int(11) NOT NULL,
`codturno` int(11) NOT NULL,
`codperiodo` int(11) NOT NULL,
`becado` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`statusest` int(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Volcado de datos para la tabla `estudiantes`
--

INSERT INTO `estudiantes` (`codest`, `cedpadre`, `cedest`, `pnomest`, `snomest`, `papeest`, `sapeest`, `sexoest`, `direcest`, `fnacest`, `coddoc`, `codnivel`, `codgrado`, `codturno`, `codperiodo`, `becado`, `statusest`) VALUES
('A02409930', '18765432', '27541237', 'CARLOS', '', 'VARGAS', 'NAVI', 'MASCULINO', 'AV. BENI MAMORE', '2009-07-14', 1, 2, 1, 1, 1, 'NO', 1),
('A19EF297C', '18765432', '21123456', 'RAFAEL DE JESUS', '', 'CONTRERAS', 'QUINTERO', 'MASCULINO', 'SANTA CRUZ DE MORA', '2002-12-14', 1, 2, 1, 1, 1, 'MEDIA', 1),
('A1A407ACA', '81321310', '21456234', 'RUBEN', 'DARIO', 'CHIRINOS', 'PAREDES', 'MASCULINO', 'MUCUJEPE CALLE PRINCIPAL', '1996-10-17', 1, 2, 1, 1, 1, 'NO', 1),
('A20E28C51', '16317737', '24453445', 'ALEXANDER', '', 'ROJAS', 'CABALLERO', 'MASCULINO', 'AV O DE OCTUBRE BARRIO SAN MIGUEL', '2003-06-10', 1, 2, 1, 1, 1, 'NO', 1),
('A2146E2E7', '18765432', '21456789', 'DIGMAR', '', 'PAREDES', '', 'FEMENINO', 'SANTA CRUZ DE MORA', '2005-12-21', 1, 2, 1, 1, 1, 'NO', 1),
('A412A2046', '16317737', '29587496', 'MARIA', 'JOSE', 'CONTRERAS', 'MARQUEZ', 'FEMENINO', 'EL VIGIA ESTADO MERIDA', '2000-10-17', 1, 2, 1, 1, 1, 'NO', 1),
('A4DEC5D92', '18765432', '25678354', 'LUIS', 'FERNANDO', 'VALENZUELA', 'GUTIERREZ', 'MASCULINO', 'AV ACEITERA SN BARRIO DE JUNIO', '2007-06-11', 2, 2, 10, 1, 1, 'NO', 0),
('A59B5F192', '12876516', '18633189', 'RICHARD', 'JOSUE', 'CHIRINOS', 'BELLO', 'MASCULINO', 'MUCUJEPE CALLE PRINCIPAL', '2004-12-08', 2, 2, 10, 1, 1, 'MEDIA', 0),
('A81C20092', '14123456', '98981212', 'CARMEN', 'BOLIVIA', 'MONTENEGRO', 'NUÑEZ', 'FEMENINO', 'BARRIO 1 DE DICIEMBRE AV. 4 DE PASAJE N. 855', '1994-07-26', 2, 2, 10, 1, 1, 'NO', 0),
('A9D8DBE61', '539576', '25654321', 'LENIN', 'JOSE', 'VIERA', 'RODRIGUEZ', 'MASCULINO', 'CABIMAS ESTADO ZULIA', '2002-09-24', 2, 2, 10, 1, 1, 'NO', 0),
('AB0D62A90', '16317737', '19876509', 'CARLITOS', '', 'VALENZUELA', 'VILLANUEVA', 'MASCULINO', 'AV ONCE DE OCTUBRE SN BARRIO NUEVO HORIZONTE', '1999-05-17', 2, 2, 13, 1, 1, 'NO', 0),
('ABC12462F', '10793241', '55667788', 'SIMÓN', '', 'IRIARTE', 'MUÑOZ', 'MASCULINO', 'BARRIO CENTRAL S/N', '1994-12-20', 3, 2, 13, 1, 1, 'NO', 0),
('AC65CB66B', '14123456', '897632', 'LIDIA', 'LUZ', 'MAMANI', 'QUISPE H', 'FEMENINO', 'AV. ACEITERA N. 673, S/N, BARRIO 1RO DE SEPTIEMBRE', '2009-08-04', 3, 2, 13, 1, 1, 'NO', 0),
('ACC809A2B', '33983532', '24984672', 'LEIDIMAR', 'JOSE', 'VIERA', 'RODRIGUEZ', 'FEMENINO', 'CABIMAS ESTADO ZULIA', '2003-04-15', 3, 2, 13, 1, 1, 'NO', 0),
('AD1B10315', '43232423', '12345555', 'RAMON', 'JOSE', 'GUTIERREZ', 'PEREZ', 'MASCULINO', 'SANTA CRUZ DE MORA ESTADO MERIDA', '1987-12-24', 4, 3, 16, 1, 1, 'NO', 0),
('AED430736', '12876516', '18633175', 'MOISES', 'RODOLFO', 'CHIRINOS', 'LEAL', 'MASCULINO', 'MUCUJEPE CALLE PRINCIPAL', '2003-11-30', 4, 3, 16, 1, 1, 'MEDIA', 0),
('AF2C9EFE5', '33983532', '5601253', 'DENIS', '', 'OHARA', 'ANTEZANA', 'MASCULINO', 'BARRIO ROSEDAL', '1986-05-12', 4, 3, 16, 1, 1, 'MEDIA', 0);


--
-- Estructura de tabla para la tabla `pagos`
--

CREATE TABLE `pagos` (
`codpago` int(11) NOT NULL,
`numcomprobante` varchar(25) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`codest` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`codnivel` int(11) NOT NULL,
`codgrado` int(11) NOT NULL,
`codturno` int(11) NOT NULL,
`codperiodo` int(11) NOT NULL,
`becado` varchar(10) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`mespago` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
`montopago` float(8,2) NOT NULL,
`fechapago` date NOT NULL,
`statuspago` int(2) NOT NULL,
`codigo` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Volcado de datos para la tabla `pagos`
--

INSERT INTO `pagos` (`codpago`, `numcomprobante`, `codest`, `codnivel`, `codgrado`, `codturno`, `codperiodo`, `becado`, `mespago`, `montopago`, `fechapago`, `statuspago`, `codigo`) VALUES
(1, 'C04B9BED4B8', 'A02409930', 2, 1, 1, 1, 'NO', '02', 200.00, '2017-07-17', 1, 1),
(2, 'C04B9BED4B8', 'A02409930', 2, 1, 1, 1, 'NO', '03', 200.00, '2017-07-17', 1, 1),
(3, 'C04B9BED4B8', 'A02409930', 2, 1, 1, 1, 'NO', '04', 200.00, '2017-07-17', 1, 1),
(4, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '05', 200.00, '2017-07-17', 1, 1),
(5, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '06', 200.00, '2017-07-17', 1, 1),
(6, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '07', 200.00, '2017-07-17', 1, 1),
(7, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '08', 200.00, '2017-07-17', 1, 1),
(8, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '09', 200.00, '2017-07-17', 1, 1),
(9, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '10', 200.00, '2017-07-17', 1, 1),
(10, 'C0BEF2B5BDB', 'A02409930', 2, 1, 1, 1, 'NO', '11', 200.00, '2017-07-17', 1, 1),
(11, 'CDAD7B785EB', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '02', 100.00, '2017-07-17', 1, 1),
(12, 'CDAD7B785EB', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '03', 100.00, '2017-07-17', 1, 1),
(13, 'CDAD7B785EB', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '04', 100.00, '2017-07-17', 1, 1),
(14, 'CDAD7B785EB', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '05', 100.00, '2017-07-17', 1, 1),
(15, '0', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '06', 100.00, '2017-07-17', 2, 1),
(16, '0', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '07', 100.00, '2017-07-17', 2, 1),
(17, '0', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '08', 100.00, '2017-07-17', 0, 1),
(18, '0', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '09', 100.00, '2017-07-17', 0, 1),
(19, '0', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '10', 100.00, '2017-07-17', 0, 1),
(20, '0', 'A19EF297C', 2, 1, 1, 1, 'MEDIA', '11', 100.00, '2017-07-17', 0, 1),
(21, 'C1CCB4AE893', 'A1A407ACA', 2, 1, 1, 1, 'NO', '02', 200.00, '2017-07-17', 1, 1),
(22, 'C1CCB4AE893', 'A1A407ACA', 2, 1, 1, 1, 'NO', '03', 200.00, '2017-07-17', 1, 1),
(23, 'C1CCB4AE893', 'A1A407ACA', 2, 1, 1, 1, 'NO', '04', 200.00, '2017-07-17', 1, 1),
(24, 'CEF5B766D13', 'A1A407ACA', 2, 1, 1, 1, 'NO', '05', 200.00, '2017-07-18', 1, 1),
(25, 'CEF5B766D13', 'A1A407ACA', 2, 1, 1, 1, 'NO', '06', 200.00, '2017-07-18', 1, 1),
(26, 'CEF5B766D13', 'A1A407ACA', 2, 1, 1, 1, 'NO', '07', 200.00, '2017-07-18', 1, 1),
(27, '0', 'A1A407ACA', 2, 1, 1, 1, 'NO', '08', 200.00, '2017-07-17', 0, 1),
(28, '0', 'A1A407ACA', 2, 1, 1, 1, 'NO', '09', 200.00, '2017-07-17', 0, 1),
(29, '0', 'A1A407ACA', 2, 1, 1, 1, 'NO', '10', 200.00, '2017-07-17', 0, 1),
(30, '0', 'A1A407ACA', 2, 1, 1, 1, 'NO', '11', 200.00, '2017-07-17', 0, 1),
(31, 'C77567D1AE6', 'A20E28C51', 2, 1, 1, 1, 'NO', '02', 200.00, '2017-07-17', 1, 1),
(32, 'C77567D1AE6', 'A20E28C51', 2, 1, 1, 1, 'NO', '03', 200.00, '2017-07-17', 1, 1),
(33, 'C77567D1AE6', 'A20E28C51', 2, 1, 1, 1, 'NO', '04', 200.00, '2017-07-17', 1, 1),
(34, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '05', 200.00, '2017-07-17', 2, 1),
(35, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '06', 200.00, '2017-07-17', 2, 1),
(36, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '07', 200.00, '2017-07-17', 2, 1),
(37, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '08', 200.00, '2017-07-17', 0, 1),
(38, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '09', 200.00, '2017-07-17', 0, 1),
(39, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '10', 200.00, '2017-07-17', 0, 1),
(40, '0', 'A20E28C51', 2, 1, 1, 1, 'NO', '11', 200.00, '2017-07-17', 0, 1),
(41, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '02', 200.00, '2017-07-17', 1, 1),
(42, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '03', 200.00, '2017-07-17', 1, 1),
(43, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '04', 200.00, '2017-07-17', 1, 1),
(44, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '05', 200.00, '2017-07-17', 1, 1),
(45, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '06', 200.00, '2017-07-17', 1, 1),
(46, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '07', 200.00, '2017-07-17', 1, 1),
(47, 'C41FC293F4C', 'A2146E2E7', 2, 1, 1, 1, 'NO', '08', 200.00, '2017-07-17', 1, 1),
(48, '0', 'A2146E2E7', 2, 1, 1, 1, 'NO', '09', 200.00, '2017-07-17', 0, 1),
(49, '0', 'A2146E2E7', 2, 1, 1, 1, 'NO', '10', 200.00, '2017-07-17', 0, 1),
(50, '0', 'A2146E2E7', 2, 1, 1, 1, 'NO', '11', 200.00, '2017-07-17', 0, 1),
(51, 'CA9E3D93782', 'A412A2046', 2, 1, 1, 1, 'NO', '02', 200.00, '2017-07-17', 1, 1),
(52, 'CA9E3D93782', 'A412A2046', 2, 1, 1, 1, 'NO', '03', 200.00, '2017-07-17', 1, 1),
(53, 'CA9E3D93782', 'A412A2046', 2, 1, 1, 1, 'NO', '04', 200.00, '2017-07-17', 1, 1),
(54, 'CA9E3D93782', 'A412A2046', 2, 1, 1, 1, 'NO', '05', 200.00, '2017-07-17', 1, 1),
(55, 'CA9E3D93782', 'A412A2046', 2, 1, 1, 1, 'NO', '06', 200.00, '2017-07-17', 1, 1),
(56, '0', 'A412A2046', 2, 1, 1, 1, 'NO', '07', 200.00, '2017-07-17', 2, 1),
(57, '0', 'A412A2046', 2, 1, 1, 1, 'NO', '08', 200.00, '2017-07-17', 0, 1),
(58, '0', 'A412A2046', 2, 1, 1, 1, 'NO', '09', 200.00, '2017-07-17', 0, 1),
(59, '0', 'A412A2046', 2, 1, 1, 1, 'NO', '10', 200.00, '2017-07-17', 0, 1),
(60, '0', 'A412A2046', 2, 1, 1, 1, 'NO', '11', 200.00, '2017-07-17', 0, 1);
  #12 (permalink)  
Antiguo 24/07/2017, 15:14
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

disculpa si se enviaron desordenadas en verdad, pero esas son las dos tablas con q yo trabajo estudiantes vs pagos
  #13 (permalink)  
Antiguo 24/07/2017, 15:35
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

estoy tratando de hacerla de un solo estudiante, y los meses vencidos me los agrega en el meses pagados, es decir el estudiante tiene pagados los meses 02,03,04,05 y vencidos los 06,07, pero en la consulta me muestra todos en el alias del meses

Código SQL:
Ver original
  1. SELECT est.codest AS id,
  2.  
  3. CASE pag.statuspago WHEN 1 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END AS meses,
  4. CASE pag.statuspago WHEN 2 THEN GROUP_CONCAT(DISTINCT pag.mespago SEPARATOR ', ') END  AS mesesvenc
  5.  
  6. FROM pagos pag LEFT JOIN estudiantes est ON pag.codest = est.codest WHERE est.codest = 'A19EF297C' AND (pag.statuspago = '1' OR pag.statuspago = '2') GROUP BY id
  #14 (permalink)  
Antiguo 25/07/2017, 09:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 10 meses
Puntos: 447
Respuesta: Consulta usando Swhit de mysql

Hola elsaiya:

La idea general de lo que quieres hacer, es correcta, sin embargo, tienes un problema ya que en un estudiante puede tener pagos vencidos, pagos realizados y no tener pagos al mismo tiempo, al utilizar una función GROUP_CONCAT entonces los resultados puden ser null (una concatenación de un null da como resultado un null).

Lo que tienes que hacer es "consolidar" tus resultados como subconsultas, para no mezclar cada tipo, es decir, algo así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   est.codest id,
  3.     ->   est.cedest cedula,
  4.     ->   est.pnomest pNombre,
  5.     ->   est.snomest sNombre,
  6.     ->   est.papeest pApellido,
  7.     ->   est.sapeest sApellido,
  8.     ->   pag.mesespag,
  9.     ->   venc.mesesvenc
  10.     -> FROM
  11.     ->   estudiantes est
  12.     -> LEFT JOIN
  13.     ->   ( SELECT
  14.     ->       codest,
  15.     ->       CASE WHEN statuspago = 1 THEN GROUP_CONCAT(DISTINCT mespago SEPARATOR ', ') END mesespag
  16.     ->     FROM  pagos
  17.     ->     WHERE statuspago = '1'
  18.     ->     GROUP BY codest ) pag ON pag.codest = est.codest
  19.     -> LEFT JOIN
  20.     ->   ( SELECT
  21.     ->       codest,
  22.     ->       CASE WHEN statuspago = 2 THEN GROUP_CONCAT(DISTINCT mespago SEPARATOR ', ') END mesesvenc
  23.     ->     FROM  pagos
  24.     ->     WHERE statuspago = '2'
  25.     ->     GROUP BY codest ) venc ON venc.codest = est.codest;
  26. +-----------+----------+-----------------+----------+------------+------------+----------------------------------------+------------+
  27. | id        | cedula   | pNombre         | sNombre  | pApellido  | sApellido  |mesespag                                | mesesvenc  |
  28. +-----------+----------+-----------------+----------+------------+------------+----------------------------------------+------------+
  29. | A19EF297C | 21123456 | RAFAEL DE JESUS |          | CONTRERAS  | QUINTERO   |02, 03, 04, 05                          | 06, 07     |
  30. | A20E28C51 | 24453445 | ALEXANDER       |          | ROJAS      | CABALLERO  |02, 03, 04                              | 05, 06, 07 |
  31. | A412A2046 | 29587496 | MARIA           | JOSE     | CONTRERAS  | MARQUEZ    |02, 03, 04, 05, 06                      | 07         |
  32. | A02409930 | 27541237 | CARLOS          |          | VARGAS     | NAVI       |02, 03, 04, 05, 06, 07, 08, 09, 10, 11  | NULL       |
  33. | A1A407ACA | 21456234 | RUBEN           | DARIO    | CHIRINOS   | PAREDES    |02, 03, 04, 05, 06, 07                  | NULL       |
  34. | A2146E2E7 | 21456789 | DIGMAR          |          | PAREDES    |            |02, 03, 04, 05, 06, 07, 08              | NULL       |
  35. | A4DEC5D92 | 25678354 | LUIS            | FERNANDO | VALENZUELA | GUTIERREZ  |NULL                                    | NULL       |
  36. | A59B5F192 | 18633189 | RICHARD         | JOSUE    | CHIRINOS   | BELLO      |NULL                                    | NULL       |
  37. | A81C20092 | 98981212 | CARMEN          | BOLIVIA  | MONTENEGRO | NUÑEZ     |NULL                                    | NULL       |
  38. | A9D8DBE61 | 25654321 | LENIN           | JOSE     | VIERA      | RODRIGUEZ  |NULL                                    | NULL       |
  39. | AB0D62A90 | 19876509 | CARLITOS        |          | VALENZUELA | VILLANUEVA |NULL                                    | NULL       |
  40. | ABC12462F | 55667788 | SIMÓN          |          | IRIARTE    | MUÑOZ     |NULL                                    | NULL       |
  41. | AC65CB66B | 897632   | LIDIA           | LUZ      | MAMANI     | QUISPE H   |NULL                                    | NULL       |
  42. | ACC809A2B | 24984672 | LEIDIMAR        | JOSE     | VIERA      | RODRIGUEZ  |NULL                                    | NULL       |
  43. | AD1B10315 | 12345555 | RAMON           | JOSE     | GUTIERREZ  | PEREZ      |NULL                                    | NULL       |
  44. | AED430736 | 18633175 | MOISES          | RODOLFO  | CHIRINOS   | LEAL       |NULL                                    | NULL       |
  45. | AF2C9EFE5 | 5601253  | DENIS           |          | OHARA      | ANTEZANA   |NULL                                    | NULL       |
  46. +-----------+----------+-----------------+----------+------------+------------+----------------------------------------+------------+
  47. 17 rows in set (0.00 sec)

Haz la prueba y nos comentas.

Salud
  #15 (permalink)  
Antiguo 25/07/2017, 17:27
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

amigo leonardo, muchas gracias en verdad, ese era el gran problema del cual no sabia, por eso siempre me salia null los meses vencidos.

ahora una pregunta donde deberia de colocar el WHERE general para poder filtrar los pagos de un estudiantes de x periodo, es decir un

WHERE est.cedest = ? AND pag.codperiodo = ?

y poder relacionar otras tablas con la de pagos, por ejemplo tabla niveles como por ejemplo

FROM estudiantes est
INNER JOIN pagos pag ON est.codest = pag.codest
INNER JOIN padres ON padres.cedpadre = est.cedpadre
INNER JOIN turnos ON turnos.codturno = pag.codturno
INNER JOIN niveles ON niveles.codnivel = pag.codnivel
INNER JOIN secciones ON secciones.codseccion = est.codseccion
INNER JOIN grados ON grados.codgrado = secciones.codgrado
INNER JOIN periodoescolar ON periodoescolar.codperiodo = pag.codperiodo
LEFT JOIN pagospormora ON pagospormora.numcomprobante = pag.numcomprobante
WHERE est.cedest = ? AND pag.codperiodo = ?

ya que no me reconoce otro campo de la tabla pagos que trato de agregar en la consulta

y poder agregarle un COUNT(mespago) AS totalpagad , para poder obtener los meses pagados, te agradezco de antemano tu ayuda amigo

Última edición por elsaiya; 25/07/2017 a las 18:00
  #16 (permalink)  
Antiguo 25/07/2017, 18:10
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

amigo leonardo e estado tratando de mejorar la consulta, a como la necesito pero me da error cuando trato de usar la tabla pagos para poder relacionarla con otras tablas asi tengo la estructura

Código PHP:
Ver original
  1. $sql ="SELECT
  2.       est.codest id,
  3.       est.cedest cedula,
  4.       est.pnomest pNombre,
  5.       est.snomest sNombre,
  6.       est.papeest pApellido,
  7.       est.sapeest sApellido,
  8.        padres.cedpadre,
  9.        padres.nompadre,
  10.        padres.apepadre,
  11.       pag.mesespag,
  12.       venc.mesesvenc
  13.     FROM
  14.       estudiantes est
  15.     LEFT JOIN
  16.       ( SELECT
  17.           codest, COUNT(mespago) AS totalpagad,
  18.           CASE WHEN statuspago = 1 THEN GROUP_CONCAT(DISTINCT mespago SEPARATOR ', ') END mesespag
  19.         FROM  pagos
  20.         WHERE statuspago = '1'
  21.         GROUP BY codest ) pag ON pag.codest = est.codest
  22.     LEFT JOIN
  23.       ( SELECT
  24.           codest, COUNT(mespago) AS totalvenc,
  25.           CASE WHEN statuspago = 2 THEN GROUP_CONCAT(DISTINCT mespago SEPARATOR ', ') END mesesvenc
  26.         FROM  pagos
  27.         WHERE statuspago = '2'
  28.         GROUP BY codest ) venc ON venc.codest = est.codest
  29.          INNER JOIN padres ON padres.cedpadre = est.cedpadre
  30.          INNER JOIN turnos ON turnos.codturno = pag.codturno
  31.          WHERE est.cedest = '21123456' AND est.statusest = '1'";
  #17 (permalink)  
Antiguo 25/07/2017, 21:38
 
Fecha de Ingreso: marzo-2012
Ubicación: El Vigia Edo Merida
Mensajes: 144
Antigüedad: 7 años, 8 meses
Puntos: 1
Respuesta: Consulta usando Swhit de mysql

Bueno amigo en verdad muchas gracias, ya pude solucionar el problema que tenia, era volver a tomar la tabla pagos, ya me funciono como queria, la consulta final me quedo de esta manera

Código PHP:
Ver original
  1. $sql ="SELECT
  2.       est.codest id,
  3.       est.cedest cedula,
  4.       est.pnomest pNombre,
  5.       est.snomest sNombre,
  6.       est.papeest pApellido,
  7.       est.sapeest sApellido,
  8.        padres.cedpadre,
  9.        padres.nompadre,
  10.        padres.apepadre,
  11.        pagos.becado,
  12.        pagos.montopago,
  13.        pagos.codnivel,
  14.        pagos.codseccion,
  15.        pagos.codturno,
  16.        pagos.codperiodo,
  17.        periodoescolar.periodo,
  18.        periodoescolar.mesesactivos,
  19.        periodoescolar.interesmora,
  20.        pagospormora.cantmora,
  21.        niveles.nivel,
  22.        grados.grado,
  23.        secciones.seccion,
  24.        turnos.turno,
  25.       pag.mesespag,
  26.       pag.totalpagad,
  27.       venc.mesesvenc,
  28.       venc.totalvenc
  29.     FROM
  30.       estudiantes est
  31.     LEFT JOIN
  32.       ( SELECT
  33.           codest, COUNT(mespago) AS totalpagad,
  34.           CASE WHEN statuspago = 1 THEN GROUP_CONCAT(DISTINCT mespago SEPARATOR ', ') END mesespag
  35.         FROM  pagos
  36.         WHERE statuspago = '1'
  37.         GROUP BY codest ) pag ON pag.codest = est.codest
  38.     LEFT JOIN
  39.       ( SELECT
  40.           codest, COUNT(mespago) AS totalvenc,
  41.           CASE WHEN statuspago = 2 THEN GROUP_CONCAT(DISTINCT mespago SEPARATOR ', ') END mesesvenc
  42.         FROM pagos
  43.         WHERE statuspago = '2'
  44.         GROUP BY codest ) venc ON venc.codest = est.codest
  45.          INNER JOIN padres ON padres.cedpadre = est.cedpadre
  46.          INNER JOIN pagos ON est.codest = pagos.codest
  47.          INNER JOIN turnos ON turnos.codturno = pagos.codturno
  48.          INNER JOIN niveles ON niveles.codnivel = pagos.codnivel
  49.          INNER JOIN secciones ON secciones.codseccion = pagos.codseccion
  50.          INNER JOIN grados ON grados.codgrado = secciones.codgrado
  51.          INNER JOIN periodoescolar ON periodoescolar.codperiodo = pagos.codperiodo
  52.          LEFT JOIN pagospormora ON pagospormora.numcomprobante = pagos.numcomprobante
  53.          WHERE est.cedest = ? AND pagos.codperiodo = ? GROUP BY id";

Etiquetas: php, select, sql, tabla, usando
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:02.