2009-07-31 24 views
13

Thông qua dịch vụ web, ứng dụng của tôi nhận được danh sách số nhận dạng. Với danh sách này, tôi phải tra cứu một trường, một trường cho mỗi số nhận dạng. Nếu trường không tồn tại, giá trị phải là rỗng (nó phải được hiển thị).MySQL Cách tốt nhất để chọn sử dụng danh sách ID của

Tôi tự hỏi điều gì sẽ là phương pháp tốt nhất. Đầu tiên tôi nghĩ tốt nhất là tạo một bảng tạm thời giữ id và sau đó nối nó vào bảng giữ dữ liệu, nhưng nếu tôi sửa thì phải mất ít nhất 1 truy vấn cho mỗi mã định danh để chèn nó vào bảng tạm thời. Trong trường hợp đó, có vẻ như tôi cũng có thể lặp đi lặp lại thông qua danh sách số nhận dạng trong ứng dụng của tôi và truy vấn cơ sở dữ liệu 1 của 1. Điều này có đúng không? Bạn có thể tư vấn cho phương pháp nào?

lời chúc mừng,

Coen

Trả lời

20

Sử dụng SELECT WHERE IN() Cú pháp để có được một kết quả thiết lập với các dữ liệu bạn cần, sau đó lặp trên nó trong mã của bạn. Bằng cách này bạn chỉ truy vấn DB một lần và chỉ nhận được thông tin bạn cần.

+0

+1 cách tốt nhất để làm điều đó – alex

0

Hiển thị null là thủ thuật, bạn cần phải tham gia bảng đó, vì vậy có hai lần tìm kiếm chỉ mục cho mỗi bản ghi. Chỉ cần thực hiện truy vấn 1 đến 1 cho mỗi số nhận dạng sẽ chỉ yêu cầu một tra cứu chỉ mục.

Trong thực tế, nó sẽ không được gấp đôi chậm, vì mã định danh sẽ nằm trong bộ đệm khóa chính vào thời điểm tra cứu lần hai được thực hiện.

Tùy chọn khác là hiển thị kết quả đầu ra của bạn bằng cách sử dụng số nhận dạng đầu vào và sử dụng "IN" như đã đề xuất trước đó. Các bản ghi null sẽ không có trong đầu ra truy vấn, nhưng điều đó sẽ là ok vì bạn biết những gì đã được yêu cầu.

+0

Giả định rằng các mục mà anh ta nhận được là các mục duy nhất trong bảng, nếu chúng là tập hợp con thì anh ta sẽ lấy lại nhiều hơn anh ta yêu cầu. – MyItchyChin

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