Foros del Web » Programando para Internet » PHP »

SELECT max(salario)

Estas en el tema de SELECT max(salario) en el foro de PHP en Foros del Web. A ver quien me puede ayudar con este script $sele_db="SELECT max(salario) FROM nominas"; $cueri_db=mysql_query($sele_db); $salario=mysql_fetch_array($cueri_db); do { echo $salario['salario'];}while($salario=mysql_fetch_array($cueri_db)); Esto no me imprime nada, por ...
  #1 (permalink)  
Antiguo 07/07/2010, 10:36
 
Fecha de Ingreso: agosto-2009
Mensajes: 80
Antigüedad: 14 años, 7 meses
Puntos: 0
SELECT max(salario)

A ver quien me puede ayudar con este script

$sele_db="SELECT max(salario) FROM nominas";
$cueri_db=mysql_query($sele_db);
$salario=mysql_fetch_array($cueri_db);
do { echo $salario['salario'];}while($salario=mysql_fetch_array($cueri_db));

Esto no me imprime nada, por qué?

Lo que pretendo es pasar a una variable el dato max que obtenga, como lo hago?

Gracias
  #2 (permalink)  
Antiguo 07/07/2010, 10:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: SELECT max(salario)

Trata usando while solamente y depura la consulta
Código PHP:
Ver original
  1. $sele_db="SELECT max(salario) FROM nominas";
  2. $cueri_db=mysql_query($sele_db) or die(mysql_error());
  3. $salario=mysql_fetch_array($cueri_db);
  4. while($salario=mysql_fetch_array($cueri_db)){
  5.     echo $salario['salario'];
  6. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 07/07/2010, 12:20
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

Mejor código:
1 - Usar variables en ingles (más cortas y tu código siempre sera internacional)
2 - Evitar variables de cadena para las consultas mysql
3 - Dejar espacios entre operadores (el =, +, *, etc)

Quedaría como:
Código PHP:
Ver original
  1. $res = mysql_query("SELECT max(salario) FROM nominas") or die(mysql_error());
  2. while($row = mysql_fetch_array($res))
  3. {
  4.     echo $row['salario'];
  5. }

PD: también tenias duplicado el mysql_fetch_array
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #4 (permalink)  
Antiguo 07/07/2010, 12:22
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 5 meses
Puntos: 334
Respuesta: SELECT max(salario)

Cita:
Evitar variables de cadena para las consultas mysql
a que te refieres con eso ?
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 07/07/2010, 13:37
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

Cita:
Iniciado por Hidek1 Ver Mensaje
a que te refieres con eso ?
A crear una variable como esta:
Código PHP:
 $sele_db="SELECT max(salario) FROM nominas"
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #6 (permalink)  
Antiguo 07/07/2010, 13:41
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: SELECT max(salario)

No le veo nada malo, solo que ahorras líneas de código.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 07/07/2010, 14:06
 
Fecha de Ingreso: julio-2009
Mensajes: 51
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: SELECT max(salario)

osea ahorras lineas de codigo y como php se ejecuta en el servidor, ahorrandote esas lineas, no saturas tanto el server, aunque sea una sola linea, ya que si trabajas todo el codigo asi... serian miuchas mas.
  #8 (permalink)  
Antiguo 07/07/2010, 14:26
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

Por lo general, a menos que tengas una consulta de muchas lineas (digamos 3 o 4) es más conveniente hacerlo así. Si tuvieras muchas más es casi mejor hacer un PROCEDURE en mysql. Pero bueno, no desviemos el tema.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #9 (permalink)  
Antiguo 07/07/2010, 14:56
 
Fecha de Ingreso: mayo-2010
Mensajes: 212
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: SELECT max(salario)

No se, es opinion mia pero prefiero tener este tipo de variables para poder estudiar el flujo de informacion en especial si se tienen variables concatenadas
Cita:
Iniciado por colino Ver Mensaje
[php]
$sele_db="SELECT max(salario) FROM nominas";
[php
]
  #10 (permalink)  
Antiguo 07/07/2010, 14:57
 
Fecha de Ingreso: agosto-2009
Mensajes: 80
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: SELECT max(salario)

Que va, sigue sin funcionar.

Le hago un mysql_num_rows y efectivamente me arroja un dato.

Creo que no lo imprime porque está en el modo de llamar al indice asociativo.

De momento sigo investigando haber porque ocurre esto.
Probe con el do{ porque al menos me ejecuta el bucle una vez
ya informaré sobre la solucion , si la encuentro claro
  #11 (permalink)  
Antiguo 07/07/2010, 15:10
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: SELECT max(salario)

Si solo te vas a traer el salario máximo de la tabla nóminas, por que no utilizar la función
Código PHP:
mysql_fetch_field() 
Creo que sería la correcta (soy más de Zend )
  #12 (permalink)  
Antiguo 07/07/2010, 15:15
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

También podría ponerle LIMIT 1 (para mejorar la eficiencia)
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #13 (permalink)  
Antiguo 07/07/2010, 15:27
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: SELECT max(salario)

Cita:
Iniciado por shakaran Ver Mensaje
También podría ponerle LIMIT 1 (para mejorar la eficiencia)
No hay diferencias de eficiencia alguna entre usar LIMIT o no.

Si tienes ahí alguna tabla con más de 200.000 registros haz pruebas y confirmamelo.


Pero vamos....

Edito: Además que en su consulta se ve claramente que solo se va a traer un resultado, por lo que el LIMIT es innecesario.

Última edición por Nathan_1979; 07/07/2010 a las 15:37
  #14 (permalink)  
Antiguo 07/07/2010, 16:32
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

SI hay diferencias y mucho es una técnica de optimización y evita slow queries.

Cuando haces una consulta y se compara con toda la tabla mysql se hacen operaciones distintas si tienes un LIMIT o no puesto. El poner esa restricción mejor mucho más la eficiencia, sobre todo en consultas.

Y no lo digo yo, busca por la web y veras muchos grandes gurus que lo usan y recomiendan. Y precisamente es un caso particular usarla cuando es solo un resultado lo que se devuelve.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #15 (permalink)  
Antiguo 07/07/2010, 16:43
Avatar de alguienmas  
Fecha de Ingreso: mayo-2009
Mensajes: 62
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: SELECT max(salario)

salario no es el nombre del campo....
haces un select de max(salario) este campo no se llama salario.... dependera del motor de BD el nombre que le dara.....

solucion....
1)
Código:
$sele_db="SELECT max(salario) FROM nominas";
$cueri_db=mysql_query($sele_db);
$salario=mysql_fetch_array($cueri_db);
do { 
     print_r($salario);  /////echo $salario['salario'];
}while($salario=mysql_fetch_array($cueri_db));
te mostrara en pantalla las key del array.

2)
Código:
$sele_db="SELECT max(salario) as sal FROM nominas";
$cueri_db=mysql_query($sele_db);
$salario=mysql_fetch_array($cueri_db);
do { 
    echo $salario['sal'];
}while($salario=mysql_fetch_array($cueri_db));
Saludos
  #16 (permalink)  
Antiguo 07/07/2010, 16:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: SELECT max(salario)

Cita:
Iniciado por shakaran Ver Mensaje
SI hay diferencias y mucho es una técnica de optimización y evita slow queries.

Cuando haces una consulta y se compara con toda la tabla mysql se hacen operaciones distintas si tienes un LIMIT o no puesto. El poner esa restricción mejor mucho más la eficiencia, sobre todo en consultas.

Y no lo digo yo, busca por la web y veras muchos grandes gurus que lo usan y recomiendan. Y precisamente es un caso particular usarla cuando es solo un resultado lo que se devuelve.
Bueno según el manual de MySQL
Cita:
Iniciado por http://dev.mysql.com/doc/refman/4.1/en/select.html#id689699
La cláusula LIMIT puede usarse para limitar el número de filas devueltas por la instrucción SELECT.
Entiendo que lo que quiere decir que el LIMIT se ejecuta después del SELECT (puede que me equivoque, pero eso es lo que entiendo lo que dice esa oración). Sí es verdad que se puede usar para limitar los datos y mostrar la cantidad que deseas que se muestre en pantalla, y esto a su vez ayudará a mostrar los datos más rápido en pantalla (no quiere decir que se está optimizando), por eso se usa la paginación. Ahora también es buena práctica usar el limit, así como hace, por ejemplo, phpMyAdmin en todas sus consultas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 07/07/2010, 16:53
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: SELECT max(salario)

Cita:
Iniciado por shakaran Ver Mensaje
Y no lo digo yo, busca por la web y veras muchos grandes gurus que lo usan y recomiendan. Y precisamente es un caso particular usarla cuando es solo un resultado lo que se devuelve.
Quiero resultados, lo demás es palabrería.

Prueba con una tabla con 3 millones de registros por ejemplo (en internet hay cientos de .sqls)

Y confirmalo, si es así: tomaré nota no lo dudes,

Los gurus a mi entender están aquí: http://dev.mysql.com/ (no he visto nada acerca del LIMIT con MAX )

Y en otras no he visto nada por el estilo a lo que dices.
__________________
Debian Squeeze rules!
  #18 (permalink)  
Antiguo 07/07/2010, 16:53
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Bueno, centrandonos, por lo que no te funciona es porque no sacas el MAX bien. Asi debería:

Código PHP:
Ver original
  1. $res = mysql_query("SELECT MAX(salario) FROM nominas") or die(mysql_error());
  2. while($row = mysql_fetch_array($res))
  3. {
  4.     echo $row['MAX(salario)'];
  5. }

Cita:
Iniciado por Nathan_1979 Ver Mensaje
Quiero resultados, lo demás es palabrería.

Prueba con una tabla con 3 millones de registros por ejemplo (en internet hay cientos de .sqls)

Y confirmalo, si es así: tomaré nota no lo dudes,

Los gurus a mi entender están aquí: http://dev.mysql.com/ (no he visto nada acerca del LIMIT con MAX )

Y en otras no he visto nada por el estilo a lo que dices.
Puedes preguntarlo en foros de mysql, pero google te da la misma respuesta mucho más rapido ;)

PD: que no proceda de la fuente y no trabaje para mysql el que lo diga, no quiere decir que no sea cierto ;)
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net

Última edición por GatorV; 07/07/2010 a las 23:04
  #19 (permalink)  
Antiguo 07/07/2010, 17:03
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Cita:
Iniciado por shakaran Ver Mensaje
Puedes preguntarlo en foros de mysql, pero google te da la misma respuesta mucho más rapido ;)

PD: que no proceda de la fuente y no trabaje para mysql el que lo diga, no quiere decir que no sea cierto ;)
No dudes que yo os mostraría resultados para defender una afirmación mía ante vosotros.

Que menos, no?

Aún así, lo probaré... tengo curiosidad.

Veo que en tu ejemplo no le pones el LIMIT :D

Cita:
Iniciado por alguienmas Ver Mensaje
salario no es el nombre del campo....
haces un select de max(salario) este campo no se llama salario.... dependera del motor de BD el nombre que le dara.....

solucion....
1)
Código:
$sele_db="SELECT max(salario) FROM nominas";
$cueri_db=mysql_query($sele_db);
$salario=mysql_fetch_array($cueri_db);
do { 
     print_r($salario);  /////echo $salario['salario'];
}while($salario=mysql_fetch_array($cueri_db));
te mostrara en pantalla las key del array.

2)
Código:
$sele_db="SELECT max(salario) as sal FROM nominas";
$cueri_db=mysql_query($sele_db);
$salario=mysql_fetch_array($cueri_db);
do { 
    echo $salario['sal'];
}while($salario=mysql_fetch_array($cueri_db));
Saludos
salario no es el nombre del campo ?


as sal es un alias llamado sal que le pone.

Es más mira:
http://www.w3schools.com/sql/sql_func_max.asp
__________________
Debian Squeeze rules!

Última edición por GatorV; 07/07/2010 a las 23:05
  #20 (permalink)  
Antiguo 07/07/2010, 17:14
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

Cita:
Iniciado por Nathan_1979 Ver Mensaje
No dudes que yo os mostraría resultados para defender una afirmación mía ante vosotros.

Que menos, no?

Aún así, lo probaré... tengo curiosidad.

Veo que en tu ejemplo no le pones el LIMIT :D
Si tienes algun problema conmigo lo arreglamos en la calle eh? xD No, es broma xD

No tengo porque defender nada algo que ya esta muy asentado entre grandes coders e internet (vete a StackOverflow y mira usuarios con miles de puntos de reputacion en php y sus respuestas con LIMIT), pero eh, es un consejo, no es un dogma ni axioma, si no quieres no lo uses ;)

No lo defiendo también porque soy bastante vago para hacer un script de ejemplo ahora con tablas y generar registros, pero podrías hacerlo tu como contraejemplo a mi "teoria" ;) Así me refutarías (si fuera posible) ;)
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #21 (permalink)  
Antiguo 07/07/2010, 17:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: SELECT max(salario)

Puedes tomar el valor usando la llave numérica o usando la forma asociativa pero indicando un alias.
Código PHP:
Ver original
  1. $res = mysql_query("SELECT MAX(salario) as maxSalario FROM nominas") or die(mysql_error());
  2. while($row = mysql_fetch_array($res))
  3. {
  4.     echo $row['maxSalario'];
  5. }
  6.  
  7. //o
  8. $res = mysql_query("SELECT MAX(salario) FROM nominas") or die(mysql_error());
  9. while($row = mysql_fetch_array($res))
  10. {
  11.     echo $row[0];
  12. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #22 (permalink)  
Antiguo 07/07/2010, 17:23
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Cita:
Iniciado por shakaran Ver Mensaje
Si tienes algun problema conmigo lo arreglamos en la calle eh? xD No, es broma xD

No tengo porque defender nada algo que ya esta muy asentado entre grandes coders e internet (vete a StackOverflow y mira usuarios con miles de puntos de reputacion en php y sus respuestas con LIMIT), pero eh, es un consejo, no es un dogma ni axioma, si no quieres no lo uses ;)

No lo defiendo también porque soy bastante vago para hacer un script de ejemplo ahora con tablas y generar registros, pero podrías hacerlo tu como contraejemplo a mi "teoria" ;) Así me refutarías (si fuera posible) ;)
Te espero al salir del cole xDDD

Ya te digo, es más espera que lo pruebo voy a buscar una con unos cuantos milloncetes y hago pruebas.

Si es así touché , lo pondré en práctica

Un saludo!

Hola,

Despues de estar haciendo varias pruebas con una tabla de un millón y pocos (me cansé ) de registros, sigo diciendo lo mismo.

Que usar LIMIT en una consulta con MAX() o cualquier otra función de grupos (max, min, lo que sea) es a mi modo de ver una "pijotada".

Cierto que había momentos en los que se ganaba milisegundos, pero del mismo modo que se perdían.

Quizás lo recomendable sería hacer una media con decenas de resultados, para ver si realmente hay una gran diferencia.

Lo dicho, si la consulta más compleja de un proyecto es hacer un max... dudo que sea decisivo el LIMIT para obtener una velocidad optima en la consulta.

En mi proyecto tengo consultas de hasta 47 líneas, y tengo un buen tiempo de respuesta. A mi modo de ver (aparte de hacer las SQL correctamente, primordial)
es crear una base de datos compacta, normalizada, con sus índices correctamente definidos etc...


Es igual a lo que leo por internet, acerca de php y los tutoriales que hay para optimizar el código, Venga hombre!

Por ejemplo que:
Código PHP:
Ver original
  1. require() y echo()
es más rápido que
Código PHP:
Ver original
  1. require_once y printf()

Que de acuerdo, es cierto quzás se ganen milisegundos pero.... a alguien le importa estando en los tiempos que corren y con los procesadores que tenemos hoy en día?

Yo creo que es más importante tener una base sólida en nuestro proyecto, que estar con todas esas pijotadas para ganar lo que perderemos al no tener una buena base en nuestra programación inicial.


¿Que opinais?

Un saludo
__________________
Debian Squeeze rules!

Última edición por GatorV; 07/07/2010 a las 23:06
  #23 (permalink)  
Antiguo 07/07/2010, 19:53
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: SELECT max(salario)

En mi escuela suelen decir "Ingeniero que desprecia milisegundos, no es ingeniero".

Tal vez esos milisegundos no supongan nada en un proyecto patata o una consulta patata. Pero cuando tienes 1000 users online o en un simple foro que alcanze los 10k usuarios que le digan si importan muchos milisengundos y saturaciones de mysql ;)

Lo que dices de crear base solida, esta bien y debe hacerse, pero no hay porque despreciar lo demas ;) ademas que cuesta escribir LIMIT 1?

Pero que bueno, que en cada casa cada uno que programe como quiera, es lo bueno de la libertad ;)

PD: no has aportado pruebas, solo datos que puedes inventarte ;) pero bueno aceptamos pulpo como animal de compañia.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #24 (permalink)  
Antiguo 07/07/2010, 20:01
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: SELECT max(salario)

Te aseguro que un proyecto de gran envergadura poner "LIMIT 1" no es determinante :P

Un saludo

PD: al final quién inició el tema no ha vuelto por aqui

Edito: Invertarme? Las pruebas macho son copiar lo que me lanza el manager SQL y pegarlas,
te aceptamos en foros del web como troll venga....

Cansino.
__________________
Debian Squeeze rules!

Última edición por Nathan_1979; 07/07/2010 a las 20:13
  #25 (permalink)  
Antiguo 08/07/2010, 00:57
 
Fecha de Ingreso: agosto-2009
Mensajes: 80
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: SELECT max(salario)

Ya estoy aquiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiii

Perdonar mi breve ausencia, pero no tengo tanto tiempo para estar con el teclado dale que te dale. Ya quisiera.

Efectivamente, como yo suponía estaba en el modo de llamar la salida. Como bien algunos de ustedes dicen, max(salario no es el nombre del campo y ahí está el fallo. Depende del nombre del motro sql el nombre que le dé. Lo mejor ponerle el alias que queramos, y mejor así.

Bueno, no esperaba crear tanta polémica, incluso algunos quieren llegar a las manos, jejeje. Pero creo que la polémica desde un punto de vista constructivo ayuda a enriquecer el conocimiento.

Bueno, doy las gracias a todos los intervinientes y doy por concluido el tema.

SALUD, PAZ, Y LARGA VIDA

Etiquetas: select
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 08:24.