2011-07-14 28 views
6

Tôi đang làm một trang web thương mại điện tử cho khách hàng bán đồ lót, tôi đã viết bộ chọn cỡ áo cho họ nhưng họ đã quay lại với tôi hôm nay với một vấn đề nhỏ.Đặt hàng MySQL AA trước A

Với kích cỡ áo ngực, AA là nhỏ hơn so với A, vì vậy nó sẽ xuất hiện trước đó trong bảng xếp hạng, nhưng khi tôi sử dụng để mySQL bằng về kích thước, rõ ràng là nó đặt A đầu tiên, sau đó AA, sau đó B vv

Có cách nào đơn giản để tôi có thể nhận được mySQL để đặt hàng AA trước, sau đó A, B vv?

Cảm ơn

+0

lớn chủ đề; o) – powerMicha

+0

tại sao không có một cột, 'size_in_number' hoặc có thể được' size_in_cm' , sau đó sử dụng truy vấn như 'order by size_in_number'?Do bạn cung cấp kích thước nhỏ hơn, số lượng nhỏ hơn. – Nishant

+0

Xem thêm [Giá trị cụ thể (chỉ một giá trị) là kết quả truy vấn đầu tiên. Thứ tự còn lại theo dấu thời gian] (http://stackoverflow.com/questions/4570872/a-specific-valueonly-one-to-be-first-in-a-query-result-rest-order-by-time-stam). – jensgram

Trả lời

3

Giả sử A chỉ thư lặp lại có thể, bạn có thể làm điều này:

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

Nhưng giải pháp tốt hơn là tạo bảng chuyển đổi sẽ lưu trữ tất cả các kích thước có thể (Châu Âu, Nhật Bản, v.v.) bao gồm số liệu mà yoг có thể đặt hàng.

Bạn có thể sử dụng nó để xây dựng biểu đồ chuyển đổi và hiển thị kích thước trong hệ thống ưu tiên của người đó.

+0

Điều này là hoàn hảo cho những gì tôi cần. Một số câu trả lời khác cũng tốt nhưng điều này rất hay và đơn giản. Tôi có một trường sort_order nhưng các sản phẩm được kéo từ một dịch vụ web SOAP được kết nối với hệ thống EPOS của họ, cách quá nhiều để nhập các lệnh sắp xếp theo cách thủ công. Cảm ơn tất cả!! – Andy

1

Sẽ đặt và nhấn mạnh trước khi "A" công việc như vậy "_A" và được chấp nhận, bạn có thể tước nó cho mục đích hiển thị? (Không chắc chắn nếu điều này sẽ làm việc hay không)

Hoặc có một mã sắp xếp riêng biệt từ trường kích thước áo ngực để sắp xếp.

4

Tôi sẽ thêm một cột khác "orderid" (INTEGER hoặc thậm chí TINYINT) vào bảng của bạn và đặt hàng theo cột đó thay thế.

0

Bạn có thể đặt hàng theo giá trị được lấy từ cột. Bạn có thể sử dụng một CASE điều hành để xác định thứ tự: ...

source

này sẽ là lựa chọn của bạn:

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

loại AA đầu tiên, sau đó A sau đó B :)

0

Tôi muốn giới thiệu một cột sequenceNo để lưu trữ đơn đặt hàng trên máy chủ. Hãy tưởng tượng hái khác

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

Tạo một bảng tra cứu cho đặt hàng

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

Sau đó làm một cái gì đó như:

SELECT i.* FROM inventory 
LEFT JOIN bra_order b ON (b.bra_size = i.bra_size) 
ORDER BY b.sort_id 
Các vấn đề liên quan