2010-12-13 47 views
3

我有一個表,我需要檢查兩個用戶,我有ID(例如20和21)共享相同的課程,只是真或假。SQL查詢來檢查student1是否有學生的課程2

 
Table: jos_gj_users 
Columns: id_user, id_group 

Data Example: (20; 4) 
       (20; 5) 
       (20; 6) 
       (21; 6) 
       (21; 7) 

以上數據表明,用戶20和用戶21份額的過程6,但我怎麼得到這個與SQL就可以通過輸入ID和不通過與PHP的結果循環?

回答

3

嘗試自聯接:

SELECT T1.id_group 
FROM jos_gj_users T1 
JOIN jos_gj_users T2 
ON T1.id_group = T2.id_group 
WHERE T1.id_user = 20 
AND T2.id_user = 21 

只得到一個「真或假」的結果,你可以從客戶端檢查,看看是否在結果集中,而不是獲取整個存在至少一個排結果。

另外,您可以通過包裝在另一個選擇使用EXISTS上面的查詢做在SQL:

SELECT CASE WHEN EXISTS 
(
    SELECT T1.id_group 
    FROM jos_gj_users T1 
    JOIN jos_gj_users T2 
    ON T1.id_group = T2.id_group 
    WHERE T1.id_user = 20 
    AND T2.id_user = 21 
) THEN 1 ELSE 0 END AS result 

該查詢返回0(假)或1(真)。

0

這個想法是,你必須加入表本身。上半年你看看用戶1和下半年你看用戶2,並且只有具有相同id_group在兩個半這些行當然是相關的:

SELECT count(*) 
FROM jos_gj_users As j1, jos_gj_users As j2 
WHERE j1.id_user = 20 AND j2.id_user = 21 
AND j1.id_group = j2.id_group 

這將始終返回一行有一列:共享課程的數量。如果它是0,他們不會分享任何課程。

0

你可以用一個子查詢做到這一點:

select id_group 
from jos_gj_users 
where (id_user = 20) 
and id_group in (select id_group from jos_gj_users where id_user = 21) 
0
SELECT COUNT(*) > 0 FROM jos_gj_users WHERE id_user=54321 AND id_group IN (SELECT id_group FROM jos_gj_users WHERE id_user = 1345) 
0

這是查詢,顯示來自同一個組的用戶。

SELECT 
    * 
FROM 
    jos_gj_users T1 
    INNER JOIN jos_gj_users T2 ON T1.id_group = T2.id_group 
0

試試這個 - 它接受第一粗體區域中的輸入參數,並通過基於第二粗體區域值的CASE語句返回TRUE或FALSE值。

SELECT DISTINCT CASE WHEN
(SELECT DISTINCT COUNT(id_group)FROM jos_gj_users WHERE id_user IN (20,21)
GROUP BY id_group
HAVING COUNT(DISTINCT id_user)= 2)IS NOT NULL THEN 'TRUE'
ELSE 'FALSE'
END
FROM jos_gj_users