Foros del Web » Programando para Internet » PHP »

Realizar un query y seleccionar segun ultimo ID

Estas en el tema de Realizar un query y seleccionar segun ultimo ID en el foro de PHP en Foros del Web. Hola expertos! He estado intentando algo y llegue al punto de recoger los datos, pero cuando le quiero decir al QUERY que seleccione de todos ...
  #1 (permalink)  
Antiguo 27/04/2005, 10:48
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
Realizar un query y seleccionar segun ultimo ID

Hola expertos!

He estado intentando algo y llegue al punto de recoger los datos, pero cuando le quiero decir al QUERY que seleccione de todos ellos solo el ulimto ingresado... se me complica...

Como puedo decirle que quiero solamente el ultimo ID, o sea , el que tenga el ID mas grande?

esto es lo que escribi

$busqueda= @mysql_query("SELECT NAME, ENTRY FROM "VGB_ENTRY" WHERE ID");-------->> aca me trabe, no se decirle que tiene que ver en ID

gracias por la ayuda!
  #2 (permalink)  
Antiguo 27/04/2005, 10:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
el insert y el select estan en el mismo script? De ser asi utiliza mysql_insert_id(); para pedir despues del insert el id del ultimo insertado.
Saludos
  #3 (permalink)  
Antiguo 27/04/2005, 11:40
Avatar de isaacluz  
Fecha de Ingreso: marzo-2005
Mensajes: 180
Antigüedad: 19 años, 1 mes
Puntos: 0
SELECT MAX(id) AS id FROM tabla
  #4 (permalink)  
Antiguo 27/04/2005, 15:00
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
MArtinTandil, isaacluz, gracias a ambos!!!
Pero necesito que sean mas especificos, y si pueden, que me escriban el codigo. Soy un absoluto ignorante (si me hubieran visto hacer esto con el librito al lado, tipeando como vieja...)
isaacluz...me gusto tu idea, pero no se como aplicarla. Intente algunas cosas... pero bueh
  #5 (permalink)  
Antiguo 27/04/2005, 15:29
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
De acuerdo Bueno prueba esto

CODIGO
Solo debes agregar tu coneccion y cambia tabla por el nombre de tu tabla.

Código PHP:
<?php
$sql 
"Select * from tabla order by id desc limit 0,1";
$result mysql_fetch_array($rs mysql_query($sql,$coneccion));

echo 
$result["id"];
?>
Saludos,
  #6 (permalink)  
Antiguo 27/04/2005, 18:00
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Las tres opciones son correctas.. respecto a lo de isaacluz.. no es más que una sentencia SQL y la ocuparás como siempre.. osease, asigansela a $sql en el ejemplo de dwaks y será lo mismo...

La función que te meciona Martin podrías consultarla en php.net: www.php.net/mysql_insert_id , pero como bien lo dijo, esta deberá ir después de tu insert... como quien dice, su uso será enfocado a mostrar el último id "justo" después de insertarlo... pongo "justo" entre comillas porque podrías asignarlo a una variable e irlo pasando a través de tus scrips... pero no funcionará si desde que uno inicio quieres mostrar ese dato sin hacer la ejecución de insertar.. a menos que lo guardes en una base de datos y lo recuperes .. como sea, no porque su uso este "limitado" deja de ser buena opción.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 27/04/2005 a las 18:12
  #7 (permalink)  
Antiguo 27/04/2005, 18:08
Avatar de isaacluz  
Fecha de Ingreso: marzo-2005
Mensajes: 180
Antigüedad: 19 años, 1 mes
Puntos: 0
$UltimoId= @mysql_query("SELECT MAX(ID) AS ID FROM VGB_ENTRY");

$Variable = Funcion("SELECCIONA EL MAS ALTO (ID) Y REGRESAMELO CON EL VALOR ID DE LA TABA VGB_ENTRY");
  #8 (permalink)  
Antiguo 27/04/2005, 20:41
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
Amigos, realmente estoy agradecidisimo por sus esfuerzos...
pero no entiendo nada!! Soy un absoluto lego que a duras penas hace funcionar scripts ajenos en forma de libros de visita y pequeñas funcionalidades...

NO termino de entender en lo que uds me envian como hago para que me muestre:

de la tabla VGB_ENTRY los campos NAME y ENTRY, pero sólo el del ID mas alto, no TODOS los campos.

Espero haber sido claro y agradecidisimo de nuevo!!!!
  #9 (permalink)  
Antiguo 28/04/2005, 00:49
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Vámos!! el código de dwaks hace exactamente eso.. ¿lo probaste?, ¿qué resultados obtubiste?, ¿errores?, ¿cuáles?, ¿dónde?... ¿CUÁL ES TU CÓDIGO PARA VER EL POR QUÉ NO TE RESULTA??...

Pediste se fuera específico, y creo se ha sido bastante específico... pediste código... dwaks te aportó código que hace EXACTAMENTE lo que pides... sin mayor cosa. Todo esto es tema más de SQL (el lenguaje usado por la Base de Datos) y te aconsejo visites (y leas obvio) www.mysql-hispano.org ... muy buenos artículos .

Ahora bien, intentaré explicarte lo que hace cada query para ver si queda más claro... primero la de dwaks (solo hago un mínimo cambio que no afecta en nada la idea original):
Código:
Select id from tabla order by id desc limit 0,1
Aquí haces una consulta a todos los registros de tu campo id pero los ordenas al revés, por lo que tu último registro ahora será el primero... y con LIMIT recuperas ("tomas") solo un registro... y ya que los invertiste, éste registro tomado será tu última id.

Ahora vamos con la de isaacluz (y que recomendaria):
Código:
SELECT MAX(id) AS id FROM tabla
La función MAX() tom el valor más alto... por obviedad será tu última id; AS funciona como etiqueta... y no hay más!, he ahí la simpleza... después de hacer tu consulta y demás simplemente llamala con $algo['id']... como dije antes, solo sustituye la sentencia en el código de bwaks.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 28/04/2005, 07:04
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
A la marosca... que no se me enoje la gente!!!
Ahora entiendo un poco mas lo que me dieron...

Muchas gracias a todos!!!!
Vamos a intentarlo y les cuento.

Sevemo!
  #11 (permalink)  
Antiguo 28/04/2005, 09:05
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
Bueno, lo he intentado, juro que lo he intentado!!

Este es el codigo que tengo:

<?php
$bd=@mysql_connect("localhost", "root", "root");

mysql_select_db("AUM");

$sql = ("Select id from vgb_entry order by id desc limit 0,1");

$result = mysql_fetch_array($rs = mysql_query($sql,$bd));

$busqueda= @mysql_query("SELECT NAME, ENTRY FROM VGB_ENTRY");

echo $result["id"];

while ($row = mysql_fetch_array ($busqueda))
{
echo ("<p>" . $row ["NAME"]." ". $row["ENTRY"] . "<p>");
}
?>

Pero lo que obtengo no son los contenidos de los campos NAME y ENTRY de la ultima ID, sino:

Ultima ID
NAME Entry
Name Entry
Name Entry... etc

Yo necesito solamente que me devuelva los NAME y ENTRY de la UltimaID.
Supongo que quiza diciendole en
$busqueda= @mysql_query("SELECT NAME, ENTRY FROM VGB_ENTRY WHERE ID=$sql");
o algo similar. Pero si hago eso, no me aparece ningun Mane y entry, solo aparece UltimoID.

Bueh... espero me puedan dar una mano... saludos
  #12 (permalink)  
Antiguo 28/04/2005, 09:29
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
De acuerdo

Mira tu script:

Código PHP:
<?php
$bd
=@mysql_connect("localhost""root""root");

mysql_select_db("AUM");

$sql = ("Select id from vgb_entry order by id desc limit 0,1");

$result mysql_fetch_array($rs mysql_query($sql,$bd));

$busqueda= @mysql_query("SELECT NAME, ENTRY FROM VGB_ENTRY");

echo 
$result["id"];

while (
$row mysql_fetch_array ($busqueda))
{
echo (
"<p>" $row ["NAME"]." "$row["ENTRY"] . "<p>");
}
?>
Cambialo por este
Código PHP:
<?php
$bd
=@mysql_connect("localhost""root""root");
mysql_select_db("AUM");

$sql "Select id,name,entry from vgb_entry order by id desc limit 0,1";
$result mysql_fetch_array($rs mysql_query($sql,$bd));

echo (
"<p>" $result["name"]." "$result["entry"] . "<p>");

?>
Saludos,

Última edición por dwaks; 28/04/2005 a las 09:49
  #13 (permalink)  
Antiguo 28/04/2005, 09:47
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 3 meses
Puntos: 2
Ya te lo han dicho como hacerlo, cualquiera de las dos maneras te van a llevar al mismo resultado, el último id, q es lo q quieres.
De una forma
Código PHP:
$sql "SELECT id,name,entry FROM vgb_entry ORDER BY id DESC LIMIT 0,1";
mysql_db_query($bd,$sql); 
De la otra manera
Código PHP:
$sql "SELECT name,entry, MAX(id) AS id FROM vgb_entry"
mysql_db_query($bd,$sql); 
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #14 (permalink)  
Antiguo 28/04/2005, 10:13
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
Bueno, ahora si!!!!!!!
Muchisimas gracias a todos!!!!

nso vemos en otra gran duda que tenga!

saludos
  #15 (permalink)  
Antiguo 28/04/2005, 10:42
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
Bueno, no todo es rosa...
Cuando lo probe en el servidor de mi propia maquina anduvo de 10... pero al subirlo y ponerlo online, me dio este error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home3/otraroca/campamentoseducativos-www/ult_vg.php on line 6

alguna idea?
  #16 (permalink)  
Antiguo 28/04/2005, 10:45
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
verifica los datos de coneccion a la base de datos.

Saludos,
  #17 (permalink)  
Antiguo 28/04/2005, 11:09
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
me he fijado y estan bien.
Probe cambiandolos y han aparecido mas errores, asique supongo que no es la coneccion con la base de datos, por lo que dice hay algo de la fetch_array que no le gusta...

que puede ser?
  #18 (permalink)  
Antiguo 28/04/2005, 11:35
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 3 meses
Puntos: 2
Sacale todos los @ y agregar a SQL or die(mysql_error());
es decir:
Código PHP:
$db mysql_connect(host,user,pass) or die(mysql_error());
lo mismo para mysql_select_db y mysql_db_query and mysql_fetch_array agregales or die(mysql_error()); 
saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #19 (permalink)  
Antiguo 28/04/2005, 13:00
 
Fecha de Ingreso: febrero-2004
Ubicación: BS AS
Mensajes: 12
Antigüedad: 20 años, 1 mes
Puntos: 0
mrfghhhgh... eso ya me esta dando bronca hasta a mi...
No quiero transformarme en un pesado absoluto... Pero bueh, mientas la pacienca de uds tire...

ahora me da este error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home3/otraroca/campamentoseducativos-www/ult_vg.php on line 6
Access denied for user: 'otraroca@localhost' to database 'select id,name,entry from vgb_entry order by id desc limit 0,1'

y este es el codigo que use

<?php
$bd=mysql_connect ("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("campamentoseducativos_com") or die(mysql_error());

$sql = "select id,name,entry from vgb_entry order by id desc limit 0,1";
$result = mysql_fetch_array($rs = mysql_db_query($sql,$bd)) or die(mysql_error());

echo ("<p>" . $result["name"]." ". $result["entry"] . "<p>");

?>
(por supuesto, con el usuario y el pass correctos...

gracias otra vez!
  #20 (permalink)  
Antiguo 28/04/2005, 16:54
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 3 meses
Puntos: 2
Cita:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home3/otraroca/campamentoseducativos-www/ult_vg.php on line 6
Access denied for user: 'otraroca@localhost' to database 'select id,name,entry from vgb_entry order by id desc limit 0,1'
No tienes acceso a la base de datos, el nombre de usuario debe de estar mal o la contraseña. Si lo tienes en un servidor, ponte en contacto con ellos, si estas probando en localhost y tienes phpmyadmin, puedes ver q es lo q estas haciendo mal en una parte q muestra los usuarios (no la contraseña pero si el error esta en el nombre de usuario safaste, si no deberás crear uno nuevo).
Si estas en tú máquina y bajo windows, en la carpeta bin de tu instalación de MySQL casi seguro q hay un programa q se llama "winmysqladmin", haz doble click en él y podras ver en algunas de sus pestañas el nombre de usuario y contraseña.
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #21 (permalink)  
Antiguo 28/04/2005, 17:05
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Cita:
Iniciado por sebtev
No tienes acceso a la base de datos, el nombre de usuario debe de estar mal o la contraseña. Si lo tienes en un servidor, ponte en contacto con ellos, si estas probando en localhost y tienes phpmyadmin, puedes ver q es lo q estas haciendo mal en una parte q muestra los usuarios (no la contraseña pero si el error esta en el nombre de usuario safaste, si no deberás crear uno nuevo).
Si estas en tú máquina y bajo windows, en la carpeta bin de tu instalación de MySQL casi seguro q hay un programa q se llama "winmysqladmin", haz doble click en él y podras ver en algunas de sus pestañas el nombre de usuario y contraseña.
Saludos cuidate
WOW... no hay por qué alarmarse.
Lo que puede pasar es que tengas un error en la conexión a tu BD:
Posiblemente has puesto mal alguno de los parámetros.
Pero lo más probable es que no hayas construido bien el SQL.
Para descubriri estos errores, debes forzar a PHP a que te muestre si se produce un error. Ya te dijeron cómo hacerlo:
Código PHP:
<?php
error_reporting
(E_ALL);
$bd mysql_connect ("localhost""user""pass") or die("Error en conexión ::".mysql_error());
mysql_select_db("campamentoseducativos_com") or die("Error en selección ::".mysql_error());

$sql "select id,name,entry from vgb_entry order by id desc limit 0,1";
$rs mysql_query($sql) or die("Error en consulta <b>$sql</b>::".mysql_error());
$result mysql_fetch_array($rs);// Aquí ya no pongas "or die()..."
echo ("<p>" $result["name"]." "$result["entry"] . "<p>");
?>
Y listo....
Estaremos esperando por el mensaje de error.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.