MySQL - ¿Podemos reducir varios whiles usando varias consultas mysql en Php?

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 6 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

¿Podemos reducir varios whiles usando varias consultas mysql en Php?

Publicado por Mireya (4 intervenciones) el 16/07/2018 18:42:48
Estoy generando reportes en php y mysql con ayuda de la librería phpExcel. He generado mis reportes en base a consultas y estoy haciendo uso de muchas consultas que las pongo dentro de un while para cada una, quisiera saber si puedo reducir el uso de los whiles y usar un solo arreglo o ciclo para todas las consultas?,
Este es una parte de código en la que muestra el proceso que estoy realizando, por cada resultados en la condición obtengo la suma también y así tengo muchas consultas en donde lo único que cambia es la condición y algunos campos.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$consulta = " select campo, campo1, campo2 from tabla1 where campo1 like '1%' ORDER BY campo asc";
$resultado = $conexion->query($consulta);
 
$res = " select sum(campo),sum (campo1), sum(campo2) from tabla1 where campo1 like '1%' ORDER BY campo asc";
$total = $conexion->query($res);
 
 
 
$i = 10;
while ($fila = $resultado->fetch_array()) {
    $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A'.$i,  $fila[campo'])
        ->setCellValue('B'.$i,  $fila['campo1'])
        ->setCellValue('C'.$i, utf8_encode($fila['campo2']));
    $i++;
}

while ($fila = $total->fetch_array()) {
    $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A'.$i,  $fila[campo'])
        ->setCellValue('B'.$i,  $fila['campo1'])
        ->setCellValue('C'.$i, utf8_encode($fila['campo2']));
    $i++;
}

Es un while por cada consulta, y quiero saber si puedo reducir el uso de estos y crear un solo arreglo para todas mis consultas?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

¿Podemos reducir varios whiles usando varias consultas mysql en Php?

Publicado por leonardo_josue (414 intervenciones) el 16/07/2018 19:21:32
Hola Mireya:

Por políticas del Foro, todo código de programación de cualquier lenguaje, está prohibido, ya que este es un foro de MySQL, y por lo tanto sólo debes de incluir código SQL, ya que hay muchos foristas (me incluyo entre ellos) que no conocemos de PHP. Ojo con eso para la próxima.

Ahora, no nos dices qué es lo que quiere obtener como salida, es decir, no nos das detalles de lo que resulta de ejecutar tus consultas y/o tu código PHP, entonces, tratar de ayudarte es tratar de jugar al adivino. Así es que veamos si hay un poco de suerte. Según entiendo, lo único que haces con tu código es mostrar tres campos de tu tabla (que cumplan con tu condición) y al final pones un renglón adicional con la suma, es decir, algo así:

1
2
3
4
5
6
7
+--------+--------+--------+
|     10 |     20 |     30 |
|     11 |     21 |     31 |
|     12 |     22 |     32 |
|     13 |     23 |     33 |
|     46 |     86 |    126 |
+--------+--------+--------+


Supongamos que tu tabla es más o menos así:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM tabla;
+----+--------+--------+--------+
| id | campo1 | campo2 | campo3 |
+----+--------+--------+--------+
|  1 |     10 |     20 |     30 |
|  2 |     11 |     21 |     31 |
|  3 |     12 |     22 |     32 |
|  4 |     13 |     23 |     33 |
+----+--------+--------+--------+
4 rows in set (0.00 sec)

Entonces, en lugar de hacer las consultas por separado, puedes simplemente hacer un UNION ALL entre las dos consultas:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT campo1, campo2, campo3 FROM tabla
    -> UNION ALL
    -> SELECT sum(campo1), sum(campo2), sum(campo3) from tabla;
+--------+--------+--------+
| campo1 | campo2 | campo3 |
+--------+--------+--------+
|     10 |     20 |     30 |
|     11 |     21 |     31 |
|     12 |     22 |     32 |
|     13 |     23 |     33 |
|     46 |     86 |    126 |
+--------+--------+--------+
5 rows in set (0.05 sec)

De esta manera sólo tienes que hacer un ciclo para pintar el resultado de la consulta.

Dale un vistazo para ver si te sirve. y su continuas con problemas, pon algunos datos de ejemplo de lo que tienes en tus tablas y lo que esperas como salida.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 6 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

¿Podemos reducir varios whiles usando varias consultas mysql en Php?

Publicado por Mireya (4 intervenciones) el 16/07/2018 19:27:45
ok tomare en cuenta tus comentarios, por otro lado parece que si me entendistes solo que segun se yo no se pueden realizar uniones si no se tiene el mismo numero de campos y eso me falto agregar. En una consulta menejo 10 campos y en la otra 9 campos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

¿Podemos reducir varios whiles usando varias consultas mysql en Php?

Publicado por leonardo_josue (414 intervenciones) el 16/07/2018 19:59:36
Hola de nuevo Mireya:

1
2
parece que si me entendistes solo que segun se yo no se pueden realizar uniones si no se tiene el mismo
numero de campos y eso me falto agregar. En una consulta menejo 10 campos y en la otra 9 campos.

es por eso que es tan importante que siempre que posteés alguna pregunta incluyas cuál es la estructura de tus tablas y pongas datos de ejemplo, ya que con lo que pusiste de ejemplo es imposible que nos diéramos cuenta de que en una consulta manejas 10 campos y en la otra 9 ¬¬.

Tienes razón cuando mencionas que no puedes hacer union's si las consultas tienen un número distinto de columnas, pero puedes "igualar" el número de columnas con valores "ficticios", pero dependerá completamente de tus necesidades... en mi post pasado puse esto:

1
2
si continuas con problemas, pon algunos datos de ejemplo de lo que tienes en tus tablas
y lo que esperas como salida.

Cosa que no hiciste y entonces estamos como al principio, tratando de adivinar qué es lo que necesitas.

Como te comenté, una forma de "UNIR" consultas con diferente número de de columnas sería más o menos así:

Imagina que tienes estas dos tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> select * from tabla1;
+----+-------------+-----------+
| id | descripcion | resultado |
+----+-------------+-----------+
|  1 | uno         |        10 |
|  2 | dos         |        20 |
|  3 | tres        |        30 |
+----+-------------+-----------+
3 rows in set (0.00 sec)
 
mysql> select * from tabla2;
+----+-------------+
| id | descripcion |
+----+-------------+
|  1 | otro uno    |
|  2 | otro dos    |
|  3 | otro tres   |
+----+-------------+
3 rows in set (0.00 sec)

en donde la primer consulta tiene 3 campos, mientras que la segunda tiene 2, entonces, para poder UNIR ambas consultas, puedes agregar una columna virtual a la segunda tabla para que ambas tengan 3 campos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> select id, descripcion, resultado from tabla1
    -> union all
    -> select id, descripcion, 'sin resultado' from tabla1;
+----+-------------+---------------+
| id | descripcion | resultado     |
+----+-------------+---------------+
|  1 | uno         | 10            |
|  2 | dos         | 20            |
|  3 | tres        | 30            |
|  1 | uno         | sin resultado |
|  2 | dos         | sin resultado |
|  3 | tres        | sin resultado |
+----+-------------+---------------+
6 rows in set (0.00 sec)

Esta columna puede tener cualquier valor que se te ocurra, o incluso un valor NULL, simplemente es para cumplir con el requisito de igualar el número de columnas.

Vuelve a checar si te sirve, y te repito, SI CONTINUAS CON PROBLEMAS, POSTEA DATOS DE TUS TABLAS Y A PARTIR DE ESOS DATOS, DINOS QUÉ ES LO QUE ESPERAS COMO SALIDA.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar