2012-06-26 8 views
5

Tôi đã tạo ba bảng.Chọn vị trí không bằng nhiều giá trị của các khóa của mảng kết hợp

Table1 = người dùng .Và các tên cột là userid (auto_increment) và Tên truy nhập.
Bảng2 = sở thích. tên cột là hobbyid (auto_increment) và sở thích.
Bảng3 = users_hobbies. tên cột là FK_userid và FK_hobbyid.

Bây giờ sở thíchcricket, bóng đá, bóng chuyền.
Trong khi người dùng đăng ký chỉ chọn cricket và bóng đá và tôi lưu trữ nó trong $ _SESSION ['hobby_id'] mảng kết hợp.

Nhưng trong tiểu sử, anh ấy/cô ấy muốn thêm một số sở thích khác.

Vì vậy, tôi muốn danh sách hiển thị sở thích không bằng đến $ _SESSION ['hobby_id'].

này, ofcourse đã không làm việc:

foreach($_SESSION['hobby_id'] as $k=>$v) 
{ 

    $query="select hobbyid,hobbyname from hobbies where hobbyid!= $v"; 
} 
Output was football,volleyball and cricket,volleyball....but i wanted only volleyball 

Vì vậy, tôi muốn rằng mã

$query="select hobbyid,hobbyname from hobbies where hobbyid!=(multiple values of session hobby id)"; 

Những gì tôi sẽ phải enter để nhận kết quả mong muốn (chỉ bóng chuyền)?

Trả lời

2

loại bỏ foreach vòng lặp và sử dụng NOT IN so sánh trong MySQL:

$query=" 
    SELECT hobbyid,hobbyname 
    FROM hobbies 
    WHERE hobbyid NOT IN (" . implode(',', $_SESSION['hobby_id']) . ") 
"; 
+1

làm việc như một nét duyên dáng .. có vấn đề khi $ _SESSION [ 'hobby_id'] hoàn toàn trống rỗng, nhưng tôi giải quyết nó bằng cách sử dụng đơn giản if (empty ($ _ SESSION ['hobby_id'])) ...... ** thanks ** – Santosh

+0

Chắc chắn bạn phải kiểm tra xem biến có trống không, tôi chỉ cung cấp cho bạn truy vấn cuối cùng. Nhưng bạn phải đảm bảo rằng '$ _SESSION ['hobby_id']' chỉ chứa các giá trị số (thực tế là SQL injection) – rabudde