Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2005
Avatar de dmagui
dmagui dmagui is offline
Miembro
 
Registrado: may 2005
Posts: 168
Poder: 19
dmagui Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 17-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 17-06-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 17-06-2005
Avatar de dmagui
dmagui dmagui is offline
Miembro
 
Registrado: may 2005
Posts: 168
Poder: 19
dmagui Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 17-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 17-06-2005 a las 21:25:20.
Responder Con Cita
  #6  
Antiguo 17-06-2005
Avatar de dmagui
dmagui dmagui is offline
Miembro
 
Registrado: may 2005
Posts: 168
Poder: 19
dmagui Va por buen camino
ese limit 1 a que se refiere, lo que pasa es que me sale un error diciendo que no recomoce limit 1.
Responder Con Cita
  #7  
Antiguo 17-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dmagui
me sale un error diciendo que no recomoce limit 1.
¿Realmente estamos hablando de MySql?

// Saludos
Responder Con Cita
  #8  
Antiguo 17-06-2005
Avatar de dmagui
dmagui dmagui is offline
Miembro
 
Registrado: may 2005
Posts: 168
Poder: 19
dmagui Va por buen camino
Gracias me funciono de maravilla
Responder Con Cita
  #9  
Antiguo 17-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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



// Saludos
Responder Con Cita
  #10  
Antiguo 17-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Es mas facil asi:
IBDataSet.last y segurito te muestra el ultimo registro
Responder Con Cita
  #11  
Antiguo 17-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #12  
Antiguo 17-06-2005
Avatar de dmagui
dmagui dmagui is offline
Miembro
 
Registrado: may 2005
Posts: 168
Poder: 19
dmagui Va por buen camino
Lo que pasa es que me funciono como lo dijo Federico, no me arrojo ningun error
Responder Con Cita
  #13  
Antiguo 20-06-2005
Avatar de dmagui
dmagui dmagui is offline
Miembro
 
Registrado: may 2005
Posts: 168
Poder: 19
dmagui Va por buen camino
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.
Responder Con Cita
  #14  
Antiguo 21-06-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #15  
Antiguo 21-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
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.

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
Responder Con Cita
  #16  
Antiguo 22-06-2005
johncook johncook is offline
Miembro
 
Registrado: oct 2004
Posts: 65
Poder: 20
johncook Va por buen camino
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.
Responder Con Cita
  #17  
Antiguo 22-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:38:43.


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
Copyright 1996-2007 Club Delphi