2011-09-13 53 views
6

Tôi đang phát triển một ứng dụng menu nhà hàng trong Android. Ứng dụng của tôi có một bảng cơ sở dữ liệu trong đó có các cột sau:Làm cách nào để chọn các giá trị khác biệt từ một cột trong bảng?

  • id (khóa chính)
  • loại tên
  • mục

Phạm trù cột cho thấy các chủng loại mặt hàng như rau, không veg, đồ ăn nhẹ, vv Nó có giá trị trùng lặp và tôi muốn chỉ chọn các giá trị khác biệt từ cột này. Tôi đã thử những điều sau đây nhưng nó không làm việc nếu có ai có thể cung cấp một giải pháp:

String query = "SELECT DISTINCT category FROM todo"; 

Cursor cursor = database.rawQuery(query,null); 
if (cursor != null) { 
    cursor.moveToFirst(); 
} 

return cursor; 
+0

Bạn có gặp bất kỳ lỗi nào không? – diagonalbatman

+0

tôi không nhận được bất kỳ lỗi sqlite nào, nhưng ứng dụng ngừng chạy, trình gỡ lỗi hiển thị nguồn lỗi không tìm thấy. Hiện tại tôi không sử dụng bất kỳ ứng dụng đăng nhập nào – sagar

+0

Bạn nên sử dụng logcat để gỡ lỗi ứng dụng của mình. Nó sẽ cung cấp cho chúng tôi thêm thông tin về vấn đề của bạn .. –

Trả lời

6

Hãy thử:

"SELECT DISTINCT category as _id, category FROM todo" 

này đã làm việc cho tôi trong tình cảnh tương tự.

+2

Bạn có thể giải thích điều này có nghĩa là gì không? Tại sao bạn cần thay thế "FROM todo" bằng "as _id, category FROM todo"? – Greener

+2

làm sao anh ta có thể nhận được 4 phiếu bầu? – preetam

11

Bạn cũng có thể sử dụng này cụ truy vấn-Phương pháp của lớp SQLiteDatabase mà phải mất một giá trị boolean xác định xem bạn muốn giá trị khác biệt hay không:

truy vấn Cursor công cộng (boolean biệt, String bảng, String [ ] cột, string lựa chọn, string [] selectionArgs, string groupby, string có, string orderBy, string hạn)

Link to Android Reference

Bằng cách này bạn không cần phải sử dụng rawQuery ở tất cả.

1

Đây là cách tôi làm riêng biệt, cũng để có được loại

// Get Categories 
public Cursor getCategories() { 

    Cursor c = db.rawQuery("SELECT DISTINCT " + KEY_ITEM_CAT + " as " + KEY_ITEM_ID 
      + ", " + KEY_ITEM_CAT + " FROM " + ITEMS_TABLE_NAME, null); 

    if (c != null) { 
     c.moveToFirst(); 
    } 

    return c; 
} 
0

Tôi đã tìm kiếm cùng một câu hỏi, và tôi thấy một cái gì đó mà là trực tiếp vào dung dịch theo cách đơn giản nhất! Hãy xem câu trả lời này:

https://stackoverflow.com/a/13879436/4072073

Các vấn đề liên quan