Foros del Web » Programando para Internet » PHP »

Limitar una consulta

Estas en el tema de Limitar una consulta en el foro de PHP en Foros del Web. Necesito los primeros 5 resultados de una consulta. Para esto intente con LIMIT 5 pero me muestra un solo resultado. Ej: Si coloco LIMIT 2 ...
  #1 (permalink)  
Antiguo 31/03/2003, 08:10
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Limitar una consulta

Necesito los primeros 5 resultados de una consulta. Para esto intente con LIMIT 5 pero me muestra un solo resultado.
Ej: Si coloco LIMIT 2 , me muestra el 2do registro
Si coloco LIMIT 5 , me muestra el 5to registro.....
Yo necesito los registros del 1 al 5. A continuacion muestro el codigo que estoy utilizando:

$query = "SELECT test.id, test.name
FROM test ORDER BY test.id LIMIT 5";

$res = mysql_query("$query,$conection");

while($row = mysql_fetch_array($res))
{
echo "<tr><td></td><td bgcolor=black>&nbsp;</td><td bgcolor=black align=center>
<font color=#967a33>".$row["name"]."</font>
</td><td bgcolor=black>&nbsp;</td><td>
</td></tr>";

Alguien me puede ayudar?
  #2 (permalink)  
Antiguo 31/03/2003, 08:15
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5

Debe de devolver 5 registros, del 0 al 5.
Si por lo que sea falla (caso extraño), prueba a usar LIMIT 0, 5 (5 registros a partir del 0)
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 31/03/2003, 08:19
 
Fecha de Ingreso: marzo-2003
Ubicación: Caracas - Distrito Capital
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
Hola gusti...

replantea tu query de la siguiente manera:

$query = "SELECT test.id, test.name
FROM test ORDER BY test.id LIMIT 0, 5";

asi te deberia funcionar, con LIMIT debes indicar un rango de los registros que deseas seleccionar, si quieres seleccionar del 10 al 20 indicas LIMIT 10, 20 y asi el rango de registros que desees...

bye.
  #4 (permalink)  
Antiguo 31/03/2003, 08:23
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Cai: Gracias por tu pronta respuesta pero si coloco LIMIT 0, 5 directamente me da el siguiente error

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in......
que corresponde a la linea (while($row = mysql_fetch_array($res))
  #5 (permalink)  
Antiguo 31/03/2003, 08:32
 
Fecha de Ingreso: marzo-2003
Ubicación: Caracas - Distrito Capital
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
Cambia la funcion mysql_fetch_array() por mysql_fetch_row() y en la referencia al campo que deseas mostrar, que es name colocas $row[1], que corresponderia al segundo campo indicado en el select....

bye.
  #6 (permalink)  
Antiguo 31/03/2003, 08:37
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
A ver, pensemos las cosas detenidamente.
Utiliza esto para ver el error que da MySQL:
Código PHP:
<?
$query 
"SELECT test.id, test.name
FROM test ORDER BY test.id LIMIT 5"
;
$res mysql_query("$query,$conection") or die(mysql_error());
?>
Luego utiliza mysql_fetch_array() o mysql_fetch_row() según tus preferencias (yo prefiero _array porque puedo usar el nombre del campo).

La sintaxis de LIMIT es:
LIMIT $inicio, $cantidad

LIMIT 10, 20 NO devuelve del 10 al 20 sino del 10 al 29 (20 registros empezando por el 10)
__________________
M a l d i t o F r i k i
  #7 (permalink)  
Antiguo 31/03/2003, 09:14
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
con LIMIT $inicio, $cantidad me da el siguiente error:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 7
(corresponde al linea= LIMIT $inicio, $cantidad ";
  #8 (permalink)  
Antiguo 31/03/2003, 09:24
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
¿Puede ser que uses una versión de MySQL que no soporta LIMIT?

Encontrarás más información aquí.
__________________
M a l d i t o F r i k i
  #9 (permalink)  
Antiguo 31/03/2003, 09:36
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
estoy usando la ultima version de mysql, tambien probe en el server con la version 3.23.56 y me ocurre lo mismo
  #10 (permalink)  
Antiguo 31/03/2003, 10:10
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Por si las moscas...

Utiliza esto:
Código PHP:
<?
$query 
"SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5";
$res mysql_query("$query,$conection") or die($res."<p>".mysql_error());

?>
Así verás la consulta que recibe MySQL, puede que el error esté en otro sitio.
__________________
M a l d i t o F r i k i
  #11 (permalink)  
Antiguo 31/03/2003, 10:25
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Código PHP:
//Que diferencia hay entre;
$query "SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5";
//Con;
$query "SELECT id, name FROM test ORDER BY id LIMIT 5";
//Salu2 
  #12 (permalink)  
Antiguo 31/03/2003, 10:27
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Cita:
Mensaje Original por lado2mx
Código PHP:
//Que diferencia hay entre;
$query "SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5";
//Con;
$query "SELECT id, name FROM test ORDER BY id LIMIT 5";
//Salu2 
Ninguna.
__________________
M a l d i t o F r i k i
  #13 (permalink)  
Antiguo 31/03/2003, 11:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si usas una sola tabla en la consulta puedes omitir el nombre de la tabla en las consultas .. pero si usas varias tablas ya es necesario usar el nombre_tabla.campo para referenciarte a un campo concreto de una tabla concreta de las que estés usando ....

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 31/03/2003, 11:12
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Cita:
Mensaje Original por Cluster
Si usas una sola tabla en la consulta puedes omitir el nombre de la tabla en las consultas .. pero si usas varias tablas ya es necesario usar el nombre_tabla.campo para referenciarte a un campo concreto de una tabla concreta de las que estés usando ....

Un saludo,
Suponiendo que haya nombres de campo coincidentes.

Ejemplo:

TABLA: CAMPOS
Gente: id, nombre, apellido, pais
Pais: id, pais

SELECT nombre,p.pais FROM Gente g, Pais p WHERE g.pais = p.id

nombre no necesita que especifique la tabla porque sólo existe en la tabla Gente.
id sí necesita que le indique a cual me refiero.

(Nótese tabién el uso de aliases para referenciar las tablas: Gente g, Pais p)
__________________
M a l d i t o F r i k i
  #15 (permalink)  
Antiguo 31/03/2003, 11:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sip, Cain .. estan bien las aclaraciones .. si seguimos así vamos a reeeeesccribir el manual de Mysql :PPPPPP

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 31/03/2003, 11:34
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Y en el foro de PHP, para mas INRI
__________________
M a l d i t o F r i k i
  #17 (permalink)  
Antiguo 31/03/2003, 12:23
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Bueno, ya me estoy volviendo loco con esto y quiero encontrar una solucion logica al problema... Que alguien cree una tabla con los campos " id" y "nombres" y agregen 7 registros :

id nombre
-------------------
1 juan
2 pedro
3 carlos
4 jose
5 charly
6 robeto
7 pablo

Ahora escribran la consulta para que me muestre los primeros 5 registros ( 1 al 5 ). Por favor haganlo, PRUEBENLO que realmente les muestre los registros del 1 al 5!!!! y despues mandenme el codigo para poder compararlo con el mio. Es la unica forma que se me ocurre para terminar con esto que me esta volviendo loco.......
  #18 (permalink)  
Antiguo 31/03/2003, 12:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Estas diciendo que te hagan el código a la carta? .. eso no es buscar la solución "lógica" eso es buscar resolver tu problema ..

Pon el código que estas usando .. y si alquien quiere que lo pruebe (si pones la estructura y datos de tus datos de prueba mas facil lo pondras a quien quiera ayudarte).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 31/03/2003, 12:38
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Si leerias el primer mensaje encontrarias el codigo.
  #20 (permalink)  
Antiguo 31/03/2003, 12:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si es eso lo que usas .. no está completo .. Por eso me extraó y te pido el código final que usas.

Te falta un } de cierre del While() ... Si no dá error ahí (q debería darlo) solo se ejecutaría una vez mysql_fetch_array() .. con UNO solo de los registros de la consulta que ejecutas .. A cada ejecución de mysql_fetch_xxxx() (sea array, row, etc) se mueve el puntero interno de la consulta y se selecciona el siguiente registro ..

Si quieres que prueben tu BD .. PON la estructura de tu Base de datos y datos de pruebas (exportalos con phpMyadmin) es la mejor forma de probar un código completo y mas que use Base de datos.

Un saludo,

pd: Cuando pongas Código PHP usa el boton PHP para que se vea coloreado e identado ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #21 (permalink)  
Antiguo 31/03/2003, 13:00
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
<?php

$id = mysql_connect("localhost");

$conection = mysql_select_db(mibase, $id ) or die("No puedo conectar a base de datos");

$query = "SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5 ";


$res = mysql_query("$query,$conection");

while($row = mysql_fetch_array($res))
{
echo "<tr><td></td><td bgcolor=black>&nbsp;</td><td bgcolor=black align=center>
<font color=#967a33>".$row["name"]."</font></td>
<td bgcolor=black>&nbsp;</td><td>
</td></tr>";
}
?>

------------------------------------------

Esto me muestra como resultado un solo registro o sea el 5to.
  #22 (permalink)  
Antiguo 31/03/2003, 13:06
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Siento fastidiados la fiesta, pero ¿os habeis fijado en esta linea?:
Código PHP:
$res mysql_query("$query,$conection"); 
Gracias a las comillas esto es lo mismo que hacer:
Código PHP:
$res mysql_query("SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5,$conection"); 
Y dependiend del valor de $conection (supongamos que vale 1):
Código PHP:
$res mysql_query("SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5,1"); 
Que es sacar solo el quinto elemento.

Con lo cual la solucion es poner:
Código PHP:
$res mysql_query($query,$conection); 
Sin las comillas. Ya podeis tirados de los pelos.

Saludos.

PD: ¡Pero que listo soy!
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #23 (permalink)  
Antiguo 31/03/2003, 13:24
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Si le saco las comillas como vos decis, me dea el siguiente error:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource on line 10

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource on line 12
  #24 (permalink)  
Antiguo 31/03/2003, 13:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Pues claro, porque no estas usando $conection para guardar la conexion a la base de datos (el link que devuelve mysql_connect()). Inicialmente usas $id. Yo puse $conection en el mysql_query() porque es lo que habias puesto. Simplemente cambialo por $id. Aunque eso lo tenias que haber deducido tu.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #25 (permalink)  
Antiguo 31/03/2003, 13:37
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
AHHHHHHHHH

Por fin!!!!!!!!!!!! ahora funciona OK


GRACIAS JOSEMI !!!!!!!!!!!!!!!!!!!!!
  #26 (permalink)  
Antiguo 31/03/2003, 13:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Código PHP:
<?php

$id 
mysql_connect("localhost","","");

mysql_select_db("mibase_de_datos_como_se_llame"$id ) or die(mysql_error());

$query "SELECT test.id, test.name FROM test ORDER BY test.id LIMIT 5 ";


$res mysql_query($query,$id) or die (mysql_error());

while(
$row mysql_fetch_array($res))
{
echo 
"<tr><td></td><td bgcolor=black> </td><td bgcolor=black align=center>
<font color=#967a33>"
.$row["name"]."</font></td>
<td bgcolor=black> </td><td>
</td></tr>"
;
}
?>
Ademas del detallito de josemi .. hay mas sorpresas .. el $id de conexión (link que le llaman) para usar en mysql_query() Es el que hagas al hacer mysql_connect() .. Y si quieres puedes omitirlo si haces solo una conexión en ese flujo del script ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #27 (permalink)  
Antiguo 31/03/2003, 13:51
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
De nada, para eso estamos aqui.

Cluster, es verdad, se me olvido lo de $id. Pero es que una vez que vi lo de las comillas ya no mire mas codigo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #28 (permalink)  
Antiguo 31/03/2003, 13:59
 
Fecha de Ingreso: marzo-2003
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Gracias Cluster !!! tambien
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 16:57.