MySQL select con mas selects?
Azielito:
Para obtener totales de una tabla, con ciertos filtros hice unas sentencias que muestro a continuacion...
Código
--
-- Totales.
--
-- administrativos y estatales en sala 4
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=1 AND aut_jui=1 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui ASC LIMIT 1;
-- adminstrativos y estatales en sala 10
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=1 AND aut_jui=1 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui DESC LIMIT 1;
-- administrativos municipales en sala 4
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=1 AND aut_jui=2 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui ASC LIMIT 1;
-- administrativos municipales en sala 10
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=1 AND aut_jui=2 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui DESC LIMIT 1;
-- fiscales estatales sala 4
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=2 AND aut_jui=1 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui ASC LIMIT 1;
-- fiscales estatales sala 10
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=2 AND aut_jui=1 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui DESC LIMIT 1;
-- fiscales municipales sala 4
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=2 AND aut_jui=2 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui ASC LIMIT 1;
-- fiscales municipales sala 10
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui=2 AND aut_jui=2 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui DESC LIMIT 1;
De esa forma obtengo el toal de "juicios" por tipo de juicio [administrativo|fiscal] y ademas por tipo de autoridad [estatal|municipal] de cada sala [4|10] xD
Ahora mismo me doy cuenta que se puede optimisar quitando el order by y una sala :xD
el punto es, se pueden uni erstas consultas en una sola? asi podre traer los todos datos ya en un arreglo, y no enviar una consulta cada vez =\
vi el "UNION" pero no me funciono :xD!
Saludos y gracias por su atencion :D
^Tifa^:
Bueno desconozco la estructura de tu tabla pero... haz pensado utilizar BETWEEN?
Código
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui BETWEEN 1 AND 2 AND aut_jui BETWEEN 1 AND 2 AND sal_jui=4 OR sal_jui=10 GROUP BY sal_jui ORDER BY sal_jui ASC LIMIT 1;
No se es una idea, sin saber que estas buscando con exactitud o como esta estructurada la tabla es poco lo que puedo ofrecer :P para pasarle tunning de indices a las consultas SQL recuerda utilizar 'EXPLAIN' para evaluar ;) te servira bastante para optimizaciones.
Azielito:
La verda es que soy muy malo para eso de las bases de datos xD
Mira, basicamente lo que quiero es saber cuantos "juicios" [tip_jui(administrativos|fiscales)] hay, y de estos saber cuantos son [aut_jui(estatales|municipales)] y a su vez por sala [4|10) para despues hacer comparativos...
si la sala 10 tiene ya muchos "administrativos estatales" entonces le toca insertar el siguiente "administrativo estatal" a la sala 4, y asi cada uno [administrativo municial, fiscal estatal, fiscal municipal]
la tabla es esta
Código
`id_jui` INT(9) NOT NULL AUTO_INCREMENT COMMENT 'identificador',
`fec_jui` DATE NOT NULL COMMENT 'fecha',
`tip_jui` INT(1) NOT NULL COMMENT 'tipo de juicio',
`acto_jui` VARCHAR(250) NOT NULL COMMENT 'acto impugnado',
`cons_jui` VARCHAR(11) NOT NULL COMMENT 'consecutivo anual',
`anex_jui` VARCHAR(250) NOT NULL COMMENT 'anexos',
`exp_jui` VARCHAR(250) NOT NULL COMMENT 'expediente',
`act_jui` VARCHAR(250) NOT NULL COMMENT 'actor',
`aut_jui` INT(1) NOT NULL COMMENT 'tipo autoridad',
`aut_id_jui` INT(4) NOT NULL COMMENT 'ID de autoridad',
`sal_jui` INT(4) NOT NULL COMMENT 'Sala',
`status` INT(1) NOT NULL DEFAULT '1' COMMENT 'Estado en que se encuentra',
`ter_jui` DATE NOT NULL COMMENT 'Fecha de Termino',
`fav_jui` INT(1) NOT NULL COMMENT 'A favor de...',
PRIMARY KEY (`id_jui`),
FULLTEXT KEY `acto_jui` (`acto_jui`,`exp_jui`)
y en realidad no es tan complicado, al final las sentencias me quedaron asi [independientes]
Código
--
-- Totales.
--
-- administrativos y estatales en sala 4
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=1 AND aut_jui=1 AND sal_jui=4 LIMIT 1;
-- adminstrativos y estatales en sala 10
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=1 AND aut_jui=1 AND sal_jui=10 LIMIT 1;
-- administrativos municipales en sala 4
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=1 AND aut_jui=2 AND sal_jui=4 LIMIT 1;
-- administrativos municipales en sala 10
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=1 AND aut_jui=2 AND sal_jui=10 LIMIT 1;
-- fiscales estatales sala 4
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=2 AND aut_jui=1 AND sal_jui=4 LIMIT 1;
-- fiscales estatales sala 10
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=2 AND aut_jui=1 AND sal_jui=10 LIMIT 1;
-- fiscales municipales sala 4
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=2 AND aut_jui=2 AND sal_jui=4 LIMIT 1;
-- fiscales municipales sala 10
SELECT COUNT(id_jui) AS total FROM `juicio` WHERE tip_jui=2 AND aut_jui=2 AND sal_jui=10 LIMIT 1;
^Tifa^:
Yo soy mala para comprender muchas veces lo que me preguntan...no eres unico :P
Lo que ocurre que con la sentencia que te ofreci:
Código
SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui BETWEEN 1 AND 2 AND aut_jui BETWEEN 1 AND 2 AND sal_jui IN(4,10) LIMIT 1;
No te especifica cuando el dato pertenece a tip_jui = 1 o tip_jui = 2 la misma condicion aplica para aut_jui el no te dice cual pertenece a cual, aunque el resultado te lo presentara en pantalla. Tu lo que quieres es agregar en variables por cada condicion, podrias optar por un PL digase usar un bucle FOR y pasarle parametros para que cuente las condiciones y estas sean asignadas por ejemplo a 2 variables, un mero y ultra sencillo ejemplo:
Código
FOR parametro..2 LOOP
SET @variable(parametro) := SELECT COUNT(id_jui) AS total, sal_jui FROM `juicio` WHERE tip_jui = parametro AND aut_jui = parametro AND sal_jui IN(4,10) LIMIT 1;
Es un mero ejemplo, la sintaxis no va asi pero ando un pelin rapida ;)
Azielito:
No he manejado eso, nunca :xD! como lo aplico para obtener los datos a variables de PHP? ._.
no encontre un FOR en el manual de referencia de MySQL
http://search.mysql.com/search?site=refman-50&q=FOR&lr=lang_es
pero si encontre el while :')
http://dev.mysql.com/doc/refman/5.0/es/while-statement.html
Navegación
[#] Página Siguiente