2011-07-14 16 views
6

Estoy haciendo un sitio web de comercio electrónico para un cliente que vende lencería, escribí un selector de sujetadores para ellos pero me han respondido hoy con un pequeño problema.MySQL Pedido AA antes de A

Con tallas de sujetador, AA es menor que A, por lo que debe aparecer antes que en la tabla, pero cuando se utiliza para MySQL por el tamaño, es obvio que pone un principio, luego AA, entonces B etc

¿Hay alguna manera simple en que pueda hacer que mySQL ordene AA primero, luego A, B, etc.?

Gracias

+0

gran tema; o) – powerMicha

+0

por qué no tiene otra columna, 'size_in_number' o puede ser' size_in_cm' , luego usa una consulta como 'order by size_in_number'?Dado que proporcionas un tamaño más pequeño, un número más pequeño. – Nishant

+0

Consulte también [Un valor específico (solo uno) para ser el primero en el resultado de una consulta. Rest order by time stamp] (http://stackoverflow.com/questions/4570872/a-specific-valueonly-one-to-be-first-in-a-query-result-rest-order-by-time-stam) – jensgram

Respuesta

3

Suponiendo A es la única carta que se repite es posible, se puede hacer esto:

SELECT * 
FROM bra 
ORDER BY 
     LENGTH(size) DESC, size 

Pero una solución mejor sería crear una tabla de conversión que almacenara todos los tamaños posibles (europeos, japoneses, etc.) incluido el métrico que usted puede pedir.

Puede usarlo para generar gráficos de conversión y mostrar los tamaños en el sistema preferido de la persona también.

+0

Esto es perfecto para lo que necesito. Algunas de las otras respuestas también fueron buenas, pero esto es agradable y simple. Ya tengo un campo sort_order, pero los productos se extraen de un servicio web SOAP conectado a su sistema EPOS, demasiados para ingresar manualmente los pedidos. ¡¡Gracias a todos!! – Andy

1

¿Le poniendo de relieve y antes de "A" por lo que el trabajo "_a" y ser aceptables, podría despojarlo con fines de exhibición? (No estoy seguro si esto funcionará o no)

Como alternativa, tenga un código de clasificación separado del campo del tamaño del sujetador para la clasificación.

4

Agregaría otra columna "orderid" (INTEGER o incluso TININT) a su tabla, y ordene por esa columna en su lugar.

0

Puede ordenar por un valor derivado de una columna. Se puede utilizar un CASO operador para especificar el orden: ...

source

esto sería su selecto:

select id, val 
from test 
order by 
case val 
when 'AA' then 1 
when 'A' then 2 
when 'B' then 3 
END 

tipo AA en primer lugar, a continuación, A entonces B :)

0

Preferiría introducir una columna sequenceNo para almacenar el pedido en el servidor. Imaginar otras recolectores

  • XS
  • S
  • M
  • L
  • XL
  • ...
0

Crear una tabla de consulta para el pedido

Table bra_order 
id integer auto_increment not null 
bra_size char(3) 
sort_id integer not null 

luego hacer algo como:

SELECT i.* FROM inventory 
LEFT JOIN bra_order b ON (b.bra_size = i.bra_size) 
ORDER BY b.sort_id