Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Enumerar filas de un select (https://www.clubdelphi.com/foros/showthread.php?t=57859)

lucasarts_18 30-06-2008 15:40:15

Enumerar filas de un select
 
Hola.

Estoy manejando un simple select y necesito que unos de ellos sea un campo computado que me muestre la cantidad de filas, esto es.

Código:

fila  codigo nombre        cantidad
1    0001    Camisa        5
2    0544    zapatos        6
3    0547    Polerar        28

Se entiende la idea :), basicamente eso, poder tener un campo fila que sin la necesidad de tenerlo almacenado en la base de datos.

Tambien puede crearlo directamente desde php, pero siempre pienso que es más optimo que estas cosas las haga el propio motor ;)

Gracias....

PD1: En oracle existe un palabra reservada (función) llamada rownums que permite hacer esto.

PD2: ¿Cómo puedo formatear acá en el club las filas de más arriba?, he visto forista que lo hacen y les queda bastante ordenado, ¿existe alguna etiqueta que permita hacer esto?

enecumene 30-06-2008 16:27:21

Hola, no sé si te servirá, pero ahí va:

Código SQL [-]
 set @RNUM = 0;
select @RNUM := @RNUM+1 row_number, Tabla.* from Tabla;

Saludos.

lucasarts_18 30-06-2008 16:56:48

Cita:

Empezado por enecumene (Mensaje 297234)
Hola, no sé si te servirá, pero ahí va:

Código SQL [-] set @RNUM = 0; select @RNUM := @RNUM+1 row_number, Tabla.* from Tabla;


Saludos.

Hola, eso al parecer es para MS-SQL Server. :o

Hasta Luego .-

enecumene 30-06-2008 17:13:40

Cita:

Empezado por lucasarts_18 (Mensaje 297240)
Hola, eso al parecer es para MS-SQL Server. :o

Hasta Luego .-

Ah Joder, es que todo se me parece :D.

Saludos.

roman 30-06-2008 17:29:19

Yo acabo de probarlo con MySQL y sí funciona bien.

// Saludos

lucasarts_18 30-06-2008 17:36:45

Cita:

Empezado por roman (Mensaje 297248)
Yo acabo de probarlo con MySQL y sí funciona bien.

// Saludos


:eek::eek: bueno, tendré que probarlo, no lo hice ya que esas instrucciones me olian a microsoft, lo haré apenas llegue a casa, acá no trabajo con MySQL. :(

Bye.

roman 30-06-2008 17:38:44

Cita:

Empezado por lucasarts_18 (Mensaje 297223)
PD2: ¿Cómo puedo formatear acá en el club las filas de más arriba?, he visto forista que lo hacen y les queda bastante ordenado, ¿existe alguna etiqueta que permita hacer esto?

¿Te refieres a algo así?

Código:

+------+--------+---------+----------+
| fila | codigo | nombre  | cantidad |
+------+--------+---------+----------+
| 1    | 0001  | Camisa  |  5      |
+------+--------+---------+----------+
| 2    | 0544  | zapatos |  6      |
+------+--------+---------+----------+
| 3    | 0547  | Polerar | 28      |
+------+--------+---------+----------+

// Saludos

enecumene 30-06-2008 17:41:38

Oye Roman, ¿cómo demonios logras cuadrar ese cuadro en el club?, nunca me sale así, perdón si me salgo del tema, no pude evitar hacer la pregunta.

Saludos.

roman 30-06-2008 17:47:56

Si bebieras menos chela... :D

No, ya en serio, lo que yo hago es hacer la tabla en el block de notas, pues como usa letra de ancho fijo me permite formarla correctamente. Luego copio y pego en el mensaje dentro de una etiqueta [code]. Al pegar, la tabla se descuadra en el editor porque el editor de mensaje no usa letra de ancho fijo, pero no importa porque la etiqueta [code] sí, por lo que al mostrar el mensaje ya queda bien.

// Saludos

enecumene 30-06-2008 17:52:43

Vale, gracias Roman, para la próxima ya sabré como hacerlo, muchas gracias.

Cita:

Empezado por Roman
Si bebieras menos chela... :D
Si dejas de invitarme tanto, tal vez :D

lucasarts_18 30-06-2008 18:08:03

Cita:

Empezado por roman (Mensaje 297253)
¿Te refieres a algo así?

Código:

+------+--------+---------+----------+
| fila | codigo | nombre  | cantidad |
+------+--------+---------+----------+
| 1    | 0001  | Camisa  |  5      |
+------+--------+---------+----------+
| 2    | 0544  | zapatos |  6      |
+------+--------+---------+----------+
| 3    | 0547  | Polerar | 28      |
+------+--------+---------+----------+

// Saludos

Sí Román, gracias por el tips, a la noche lo intentaré desde casa, acá me da miedo, jejeje....;)

lucasarts_18 01-07-2008 03:24:08

Lo he intentado y no me funciona.

Con esta frase y como bien dice nuestro compañero julián, me explicado como el culo, jeje.
Lo que quiero decir es que la columna donde debe aprecer el número de filas simplemente me aparece null.

Gracias .-

roman 01-07-2008 16:31:23

Así probé yo y funciona:

Código PHP:

<?php
mysql_query
('set @fila = 0');
$filas mysql_query('select @fila := @fila + 1 as fila, clave, nombre from cliente')
?>
<table>
<tr>
    <th>Fila</th>
    <th>Clave</th>
    <th>Nombre</th>
</tr>
<?php while ($fila mysql_fetch_assoc($filas)): ?>
<tr>
    <td><?php echo $fila['fila'?></td>
    <td><?php echo $fila['clave'?></td>
    <td><?php echo $fila['nombre'?></td>
</tr>
<?php endwhile ?>
</table>

// Saludos

enecumene 01-07-2008 17:01:47

Yo siempre lo he logrado hacerlo en php, más no he podido hacerlo en delphi con Zeos.

Saludos.

roman 01-07-2008 17:13:16

Código Delphi [-]
ZQuery1.SQL.Text := 'set @fila = 0';
ZQuery1.ExecSQL;

ZQuery1.SQL.Text :=
  'select @fila := @fila + 1 as fila, clave, nombre from solicitante';
ZQuery1.Open;

// Saludos

enecumene 01-07-2008 17:44:10

Vale, no sabía que se puede hacer dos sentencias con el mismo TZQuery y me ha funcionado bien. Gracias.

Saludos

roman 01-07-2008 17:55:52

Cita:

Empezado por enecumene
no sabía que se puede hacer dos sentencias con el mismo TZQuery

Estee.. Más bien es lo que no se puede hacer. A ver, hasta donde yo sé, MySQL no acepta sentencias múltiples en una misma consulta, por ello no se puede poner

Código Delphi [-]
ZQuery1.SQL.Add('set @fila = 0');
ZQuery1.SQL.Add('select @fila := @fila + 1 as fila, clave, nombre from solicitante');

y ejecutar la consulta. Hay que hacerlo por separado. No es que se hagan dos consultas, sólo estás reusando el ZQuery. Lo mismo podría hacerse con dos ZQuery

Código Delphi [-]
ZQuery1.SQL.Text := 'set @fila = 0';
ZQuery1.ExecSQL;

ZQuery2.SQL.Text :=
  'select @fila := @fila + 1 as fila, clave, nombre from solicitante';
ZQuery2.Open;

// Saludos

enecumene 01-07-2008 17:58:53

Ahh ok, ya entendí, ahora lo tengo más claro, de nuevo gracias Roman.

Saludos.

tcp_ip_es 02-07-2008 11:55:58

ahora que he visto lo de la ejecución de dos sentencias como bien ha comentado Roman, me gustaría saber si con un TAdoQuery + ODBC + MySQL funcionaría también....

roman 02-07-2008 16:30:39

Pues podrías hacer la prueba, yo ya la hice con PHP y Zeos, te toca a tí :p

Pero no veo razon por la cual no funcione, ya que es una característica de MySQL y no de las componentes que se usen. El único requisito que veo es que ambas consultas se realicen bajo la misma conexión.

// Saludos


La franja horaria es GMT +2. Ahora son las 06:52:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi