Tôi có ba bảng để xác định người sử dụng:số MySQL các mặt hàng trong vòng "tại khoản"
USER: user_id (int), username (varchar)
USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)
USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)
Tôi muốn tạo một người dùng lớp giữa có quyền truy cập nhất định để những người dùng khác trong ứng dụng. Để xác định người sử dụng đăng nhập sử dụng có thể truy cập, tôi đang sử dụng một subquery như sau:
SELECT user_id FROM user WHERE user_id
IN (SELECT user_id
FROM user_metadata
WHERE user_metadata_field_id = 1 AND field_value = 'foo')
Hiện nay tôi đang giữ chuỗi subquery trong một biến và sau đó tự động chèn nó vào truy vấn bên ngoài mỗi khi tôi cần để kéo danh sách người dùng. Sau khi làm điều này tôi nghĩ, "nó đã được tốt hơn để chỉ lưu trữ một chuỗi các thực tế user_id
s".
Vì vậy, thay vì lưu trữ này trong một biến ...
$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";
... Tôi thực sự thực hiện các truy vấn và lưu trữ các kết quả như thế này ...
$subSql = "12, 56, 89, 100, 1234, 890";
Sau đó, khi tôi cần để thu hút người dùng mà người dùng đã đăng nhập có quyền truy cập vào, tôi có thể làm như vậy với:
$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";
Và cuối cùng là các câu hỏi:
Bạn có thể sử dụng bao nhiêu mục trong MySQL IN
CLAUSE? Việc lưu trữ các id thực tế thay vì câu lệnh sub-sql phải nhanh hơn để thực hiện truy vấn bên ngoài đó mỗi lần, đúng không?
Hey Quassnoi: có vẻ như có rất nhiều bất đồng về kiểm tra hiệu suất của bạn và xác nhận của bạn rằng một bảng tạm thời là tốt hơn. Tôi nghĩ rằng bạn có thể sai ở đây. – IcedDante
@IcedDante: có các kịch bản để tái tạo mọi thứ tôi đã viết trong bài đăng trên blog. Bạn được tự do viết bài đăng blog của riêng bạn, với các kịch bản của riêng bạn, và chứng minh tôi sai như thế nào. Nếu không, các cuộc đàm phán như thế này chỉ là không khí nóng. – Quassnoi
Tôi biết câu hỏi này là cũ, nhưng câu trả lời của bạn đã không trả lời câu hỏi thực: "Bạn có thể sử dụng bao nhiêu mục trong MySQL IN CLAUSE?" – Gusman