Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta mysql ORDER BY explode()

Estas en el tema de Consulta mysql ORDER BY explode() en el foro de Mysql en Foros del Web. Hola a todos : Tengo una consulta... quiero hacer una consulta MySql y Ordenarla de acuerdo a un campo de nombres. El problema que he ...
  #1 (permalink)  
Antiguo 29/04/2012, 21:34
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 18 años, 8 meses
Puntos: 16
Pregunta Consulta mysql ORDER BY explode()

Hola a todos :

Tengo una consulta... quiero hacer una consulta MySql y Ordenarla de acuerdo a un campo de nombres.
El problema que he tenido es que este campo de nombres, tiene alojado muchas rows pero de la siguiente forma :

Sr. Nombre Apellido Apellido
Srta. Nombre Apellido Apellido
Dr. Nombre Apellido Apellido
Sra. Nombre Apellido Apellido
Sr. Nombre Apellido Apellido
.....

Por lo que cuando doy a mi consulta ORDER BY campo-nombres no los ordena como yo quiero sino que de acuerdo a Sr., Sra., Srta., Dr. Lamentablemente tengo demasiadas rows creadas en la BD, por lo que un cambio uno por uno seria absurdo.

Logre mostrar solo el nombre con la funcion explode()
$nombre = explode(' ', $nombre, 2);
echo "$nombre[1]"

Todo ok ... pero como puedo hacer para que me ordene los resultados de mi consulta por nombre sin considerar el Prefijo ??
Se puede ? si alguien me puede orientar por favor.
__________________
Adios ...!!!!
  #2 (permalink)  
Antiguo 29/04/2012, 22:31
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 18 años, 8 meses
Puntos: 16
Respuesta: Consulta mysql ORDER BY explode()

Trate algo asi pero solo me funciona con Srta. (array[2]), como puedo hacerlo para que todos cumplan la condicion?

$pref = array("Sr.","Sra.","Srta.");
$sql = "SELECT * FROM table ORDER BY TRIM(LEADING '$pref[2] ' FROM campo) ASC";
__________________
Adios ...!!!!

Última edición por BLAH !!; 29/04/2012 a las 22:42
  #3 (permalink)  
Antiguo 29/04/2012, 22:47
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 18 años, 8 meses
Puntos: 16
Respuesta: Consulta mysql ORDER BY explode()

Hay algo que me seleccione todo después del primer espacio ?
__________________
Adios ...!!!!
  #4 (permalink)  
Antiguo 30/04/2012, 07:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 14 años, 1 mes
Puntos: 300
Respuesta: Consulta mysql ORDER BY explode()

... ORDER BY SUBSTRING_INDEX(nombrecampo, '. ', 2)
  #5 (permalink)  
Antiguo 30/04/2012, 10:35
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 18 años, 8 meses
Puntos: 16
Respuesta: Consulta mysql ORDER BY explode()

Muchas gracias !!!!
pero no me funciona ...
__________________
Adios ...!!!!

Última edición por BLAH !!; 30/04/2012 a las 10:43
  #6 (permalink)  
Antiguo 30/04/2012, 10:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 5 meses
Puntos: 2658
Respuesta: Consulta mysql ORDER BY explode()

Si no te funciona, es porque no en todos los casos de tus registros un punto viene seguido de un espacio, o bien no en todos está el punto.
El sentido de SUBSTRING_INDEX() es obtener la cadena de texto siguiente a partir de un punto variable de la misma, como es la posición de la subcadena ". ", que cambia si es Sr., Sra. o Srta.
En ese contexto, busca un patrón y devuelve lo que sigue al mismo. Pero si el patrón no es estable, no sirve.

Ahora bien, a pesar de que te resulte absurdo, probablemente la mejor solución sea corregir esos registros para eliminarles el "Sr." / "Sra. "/"Srta." que contienen y poner esa abreviatura en un campo específico (que suele llamarse "tratamiento" o "título"). Tardarás menos y tendrá mejores resultados que el "parche" que estás intentando.

Ten en cuenta que jamás se ponen esas abreviaturas en el campo de nombre, precisamente por problemas como los que se te presentan, y especialmente porque no son parte del nombre. Ponerlo todo junto es un error de consistencia que debes corregir y no parchar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 30/04/2012, 10:59
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 18 años, 8 meses
Puntos: 16
Respuesta: Consulta mysql ORDER BY explode()

gnzsoloyo, gracias por la respuesta concuerdo contigo pero esa BD la hice hace ya unos cuantos años y nunca pensé en ello .... por lo demás, todos mis campos concuerdan con la especificación de ". " aun así no esta funcionando. Creo que tendré que hacer lo que tu dices uno por uno .... son 78.847 registros .... por eso buscaba el parche
__________________
Adios ...!!!!
  #8 (permalink)  
Antiguo 30/04/2012, 11:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 14 años, 1 mes
Puntos: 300
Respuesta: Consulta mysql ORDER BY explode()

Yo soy de la opinión de gnzsoloyo. Es más, primero quitaría ese Sr. Sra. etc. y lo pasaría a otro campo, pero es que también separaría después el nombre de los apellidos. Puedes usar funciones para hacer parte del trabajo, pero luego te tocará revisar y comprobar los nombres dobles, un solo apellido, etc.
Creo que deberías hacerlo: sería lo mejor.
tratamiento
nombre
apellidos

Lo puedes hacer ayudándote de ese substring_index para cambiar los datos a otro campo
Y no hace falta que lo hagas uno a uno. Primero pasas el total y buscas luego el blanco o el nulo en ese campo de tratamiento. Ya no tendrás que ir uno a uno. Luego te tocará separar nombres de apellidos...
  #9 (permalink)  
Antiguo 30/04/2012, 11:08
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 18 años, 8 meses
Puntos: 16
De acuerdo Respuesta: Consulta mysql ORDER BY explode()

SOLUCIONADO:

no funciona al pornerlo como ORDER BY pero si en el SELECT, me explico

$sql = "SELECT substring_index(nombrecampo,'. ',-1) as nombre,email,empresa FROM cotizacion ORDER BY nombre ASC";

GRACIAS POR SUS RESPUESTAS
__________________
Adios ...!!!!

Etiquetas: order, sql, campos
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:00.