MySQL select con mas selects?

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente