我有一個表,我需要檢查兩個用戶,我有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的結果循環?
我有一個表,我需要檢查兩個用戶,我有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的結果循環?
嘗試自聯接:
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(真)。
這個想法是,你必須加入表本身。上半年你看看用戶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,他們不會分享任何課程。
你可以用一個子查詢做到這一點:
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)
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)
這是查詢,顯示來自同一個組的用戶。
SELECT
*
FROM
jos_gj_users T1
INNER JOIN jos_gj_users T2 ON T1.id_group = T2.id_group
試試這個 - 它接受第一粗體區域中的輸入參數,並通過基於第二粗體區域值的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