MySQL - Problemas con el ordenamiento

   
Vista:

Problemas con el ordenamiento

Publicado por Eduardo (2 intervenciones) el 24/11/2017 18:28:30
Hola, espero que me puedan ayudar con lo siguiente:

Estoy haciendo un programa que debe obtener datos de una base de datos en manera alfabética, letra por letra, hasta ahí todo bien pues separa cada letra, cuando pongo el ordenamiento para la letra A por ejemplo no tengo problemas con las letras acentuadas siempre y cuando sea la primera (como en la imagen)


Captura-de-pantalla-de-2017-11-24-111721


El problema surge cuando el acento esta en cualquiera de las demás letras, pues no lo pone en el lugar que le corresponde (normalmente las pone al principio todas)


Captura-de-pantalla-de-2017-11-24-111700


Captura-de-pantalla-de-2017-11-24-112912


A que puede deberse este problema?? adjunto el código que obtiene los datos

1
2
3
4
5
6
7
$qry1="select id_autor, nombre, ap_paterno, ap_materno from autor where ap_paterno like '$letra%' order by ap_paterno ASC LIMIT ".$inicio."," . $tam ;
	$rs1=odbc_exec($con, $qry1);
	while ($col = odbc_fetch_array($rs1)) {?>
	   <a href='ficha.php?autor=<?php echo $col['id_autor']?>'><?php echo $col['ap_paterno'];
			if($col['ap_materno']!='NULL'){echo ' ',$col['ap_materno'];}
			if($col['nombre']!='NULL'){ echo ', ',$col['nombre'],'<tab>';}?></a> <br><br>
	<?php }

También mencionar que la collation que tiene la base de datos es utf8_spanish_ci al igual que cada tabla
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas con el ordenamiento

Publicado por Nicolas (40 intervenciones) el 24/11/2017 18:41:37
Hola Eduardo.
Prueba la función ASCII de SQL que quizás te funcione.
Ej: Order By ASCII(ap_paterno) ASC

Espero te sea de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con el ordenamiento

Publicado por Eduardo (2 intervenciones) el 24/11/2017 20:01:52
Hola, gracias por la ayuda pero no me funciona, me manda todas las palabras con acento al final, lo que necesito es que las intercale en el lugar que le corresponde (como si no tuviera acentos)...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con el ordenamiento

Publicado por leonardo_josue (381 intervenciones) el 24/11/2017 21:14:14
Hola Eduardo:

Los acentos y caracteres especiales, suelen dar problemas si no se selecciona correctamente el CHARSET de los campos... no nos dices cuál charset tiene asignado tu campo, pero puedes probar con el operador COLLATE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mysql> SELECT * FROM tabla ORDER BY nombre COLLATE utf8_bin;
+-----------+
| nombre    |
+-----------+
| Calderón  |
| Camacho   |
| Cardona   |
| Casanova  |
| Corona    |
| Cárdenas  |
| Córcega   |
+-----------+
7 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla ORDER BY nombre COLLATE utf8_general_ci;
+-----------+
| nombre    |
+-----------+
| Calderón  |
| Camacho   |
| Cárdenas  |
| Cardona   |
| Casanova  |
| Córcega   |
| Corona    |
+-----------+
7 rows in set (0.00 sec)

Para más información, puedes checar estas páginas:

https://dev.mysql.com/doc/refman/5.7/en/charset-binary-collations.html
https://www.agustinvillalba.com/how-to-distinguish-upper-lowercase-and-utf8-characters-mysql/

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Revisar política de publicidad