Foros Club Delphi

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

dmagui 17-06-2005 20:30:00

select
 
Buenas Tardes:


De casualidad alguno sabe cual es la instruccion para seleccionar el ultimo registro que se encuentra en una tabla por ejemplo en una tabla producto.

Gracias, es que he buscado esa instruccion y no se, para ser mas especificos que me muestre el codigo del ultimo cliente que cree.

maeyanes 17-06-2005 20:35:24

Depende mucho del campo clave de tu tabla. Si es numérico y autoincremental, podrías intentar algo como:
Código SQL [-]
select max(campo_clave), nombre from clientes

delphi.com.ar 17-06-2005 20:45:12

Según tengo entendido, los motores ANSI92 no garantizan el orden de los registros. Por eso si queremos tener un orden estricto, tenemos que tener un campo por donde ordenarlos lógicamente. Para obtener un último registro de este tipo:
Código SQL [-]
SELECT *
FROM TABLA
WHERE ID = (SELECT MAX(ID) FROM TABLA)

Saludos!

dmagui 17-06-2005 20:46:10

Gracias por la respuesta,
pero al intentar esta instruccion no me funciono, lo que pasa es que estoy manejando esta instruccion en un dataset, no se si hay varie in poco la instruccion.

roman 17-06-2005 21:23:09

La instrucción que te indica Federico quizá no sirva en tu versión de MySql. Las subconsultas en MySql aparecieron hasta la versión 4 y cachito creo.

De ser así podrías intentar algo como:


Código SQL [-]
select * from tabla
order by id desc limit 1

y simplemente tomar el primer y único registro devuelto.

Por cierto, un título como "Seleccionar el último registro" hubiera sido mucho más adecuado para el hilo.

// Saludos

dmagui 17-06-2005 21:55:43

ese limit 1 a que se refiere, lo que pasa es que me sale un error diciendo que no recomoce limit 1.

roman 17-06-2005 22:05:35

Cita:

Empezado por dmagui
me sale un error diciendo que no recomoce limit 1.

¿Realmente estamos hablando de MySql?

// Saludos

dmagui 17-06-2005 22:07:14

Gracias me funciono de maravilla

roman 17-06-2005 22:24:32

¿Y se puede saber qué pasó entre

Cita:

Empezado por dmagui
ese limit 1 a que se refiere, lo que pasa es que me sale un error diciendo que no recomoce limit 1.

y

Cita:

Empezado por dmagui
me funciono de maravilla


:confused:

// Saludos

el_barto 17-06-2005 22:47:18

Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro

roman 17-06-2005 22:56:04

Cita:

Empezado por el_barto
Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro

¡Oh no!

Esto puede ser muy costoso. Muchos servidores SQL van mandando los registros al cliente conforme se van solicitando. Una operación como Last obliga al servidor a mandar todos los registros. Si se trata de miles de registros, esta simple operación puede demorar batante.

// Saludos

dmagui 17-06-2005 22:57:46

Lo que pasa es que me funciono como lo dijo Federico, no me arrojo ningun error

dmagui 20-06-2005 20:57:33

Tienes razon en algo, lo probe como federico me dijo, pero me di cuenta que esto solo me sirve cuando el codigo del producto es autoincremental, pero si no lo es no me sirve porque no me muestra cual fue el ultimo registro que cree, hay alguna forma que esto me lo muestre y que me sirva para las sentencias SQL que se maneja para delphi en el Dataset.

delphi.com.ar 21-06-2005 14:38:42

Reitero mis palabras:
Cita:

Empezado por delphi.com.ar
Según tengo entendido, los motores ANSI92 no garantizan el orden de los registros. Por eso si queremos tener un orden estricto, tenemos que tener un campo por donde ordenarlos lógicamente.


el_barto 21-06-2005 15:04:55

Y por que no creas una bandera y que esta sea autoincremental y le aplicas el codigo que te dijo Fede pero buscas es el valor maximo de la bandera:

Código:

SELECT *FROM TABLAWHERE ID = (SELECT MAX(bandera) FROM TABLA)
De este modo no importa el orden en que ingreses los codigos siempre te va a mostrar el ultimo registro que ingresaste por que le estas haciendo el MAX de la bandera. :D

Tienes que crear un generator y un trigger para que la bandera sea autoincremental y se dispare antes de la inserccion es decir un Before insert

Espero sirva de algo chao ;)

johncook 22-06-2005 16:10:27

Cita:

Citar:
Originalmente publicado por el_barto
Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro


¡Oh no!

Esto puede ser muy costoso. Muchos servidores SQL van mandando los registros al cliente conforme se van solicitando. Una operación como Last obliga al servidor a mandar todos los registros. Si se trata de miles de registros, esta simple operación puede demorar batante.
Roman: Ya que estamos en el tema quisiera que me saques una duda..
Cuando realizo un Locate, sobre un componente TTable, el servidor me envía todos los registros de la tabla al cliente, no?¨
Saludos.
Gracias.

roman 22-06-2005 16:26:48

La verdad, no lo sé. Supongo que sí pero no lo aseguro.

Por otra parte, en mi opinión este tema es algo que no debiera preocupar. Muchos recomiendan que las consultas deben de por sí acotarse de manera que no regresen demasiados registros. Ha quedado, yo creo que por razones históricas, una idea de querer ver un DBGrid con miles y miles de líneas y desplazarse por él hasta encontrar el registro deseado, cuando resulta más eficiente dar al usuario métodos para establecer criterios de búsqueda adecuados acotando así la cantidad de registros devueltos a una cantidad manejable desde el cliente.

// Saludos


La franja horaria es GMT +2. Ahora son las 15:16:14.

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