2011-08-30 37 views
29

Tôi đang cố gắng chọn các hàng trùng lặp trong bảng mysql nó hoạt động tốt cho tôi nhưng vấn đề là nó không cho phép tôi chọn tất cả các trường trong truy vấn đó, chỉ cho phép tôi chọn tên trường tôi đã sử dụng như riêng biệt, lemme viết truy vấn cho understading tốt hơnMysql chọn riêng biệt

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id") 

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id") 

1 một đang làm việc tốt

bây giờ khi tôi đang cố gắng để chọn tất cả các lĩnh vực tôi đang kết thúc với lỗi

tôi đang cố gắng để lựa chọn bản sao mới nhất cho phép ticket_id 12 7 là 3 lần trên id hàng 7,8,9 vì vậy tôi muốn chọn nó một lần với sự xâm nhập mới nhất mà sẽ là 9 trong trường hợp này và điều này được áp dụng trên tất cả các phần còn lại của của TICKET_ID

ý tưởng Bất kỳ nhờ

+2

Truy vấn thứ hai là sai. Giải thích nhiệm vụ nào bạn đang cố gắng giải quyết – zerkms

+0

Bạn đang cố gắng trả lại những trường nào khác? Trong trường hợp một cột có nhiều giá trị cho một 'ticket_id' cụ thể thì điều gì sẽ xảy ra sau đó? –

+0

giả sử ticket_id 127 là 3 lần trên id hàng 7,8,9 vì vậy tôi muốn chọn nó một lần với mục nhập mới nhất sẽ là 9 trong trường hợp này và điều này áp dụng cho tất cả phần còn lại của ticket_id ... Bất kỳ ý tưởng nào - – Shanon

Trả lời

37

bạn đang tìm kiếm "SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id?

CẬP NHẬT

SELECT t.* 
FROM 
(SELECT ticket_id, MAX(id) as id FROM temp_tickets GROUP BY ticket_id) a 
INNER JOIN temp_tickets t ON (t.id = a.id) 
+0

hoạt động nhưng tôi đang cố gắng chọn bản sao mới nhất cho phép ticket_id 127 là 3 lần trên id hàng 7,8,9 vì vậy tôi muốn chọn nó một lần với mục nhập mới nhất sẽ là 9 trong trường hợp này và điều này sẽ áp dụng trên tất cả các phần còn lại của ticket_id ... Bất kỳ ý tưởng nào bây giờ – Shanon

+1

Kiểm tra phiên bản cập nhật – a1ex07

56

DISTINCT không phải là một chức năng mà chỉ áp dụng cho một số cột. Đó là công cụ sửa đổi truy vấn áp dụng cho tất cả các cột trong danh sách chọn.

Tức là, DISTINCT chỉ giảm các hàng nếu tất cả các cột giống hệt với các cột của một hàng khác.

DISTINCT phải theo ngay sau khi SELECT (cùng với các công cụ sửa đổi truy vấn khác, như SQL_CALC_FOUND_ROWS). Sau đó, theo các công cụ sửa đổi truy vấn, bạn có thể liệt kê các cột.

  • QUYỀN:SELECT DISTINCT foo, ticket_id FROM table...

    Output một hàng cho mỗi cặp đôi khác biệt của giá trị trên TICKET_ID foo.

  • SAI:SELECT foo, DISTINCT ticket_id FROM table...

    Nếu có ba giá trị khác biệt của TICKET_ID, sẽ trở lại này chỉ có ba hàng? Điều gì sẽ xảy ra nếu có sáu giá trị khác biệt của foo? Ba giá trị nào trong sáu giá trị có thể của foo nên được xuất ra?
    Không rõ ràng như được viết.

2

Bạn có thể sử dụng như thế

mysql_query ("SELECT DISTINCT (TICKET_ID), column1, column2, cột3 TỪ TRÌNH TỰ temp_tickets THEO TICKET_ID")

+0

Mặc dù MySQL cho phép cú pháp, nó KHÔNG làm những gì bạn nghĩ ... – Jannes

+0

Không phải là câu trả lời ... –

8

Bạn có thể sử dụng nhóm bởi thay vì khác biệt. Bởi vì khi bạn sử dụng riêng biệt, bạn sẽ gặp khó khăn để chọn tất cả các giá trị từ bảng. Không giống như khi bạn sử dụng nhóm theo, bạn có thể nhận được các giá trị riêng biệt và tất cả các trường trong bảng.

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