我有一张桌子,我需要检查我有ID的两个用户(例如20和21)是否共享相同的课程,只是真或假。
Table: jos_gj_users Columns: id_user, id_group Data Example: (20; 4) (20; 5) (20; 6) (21; 6) (21; 7)
上面的数据显示用户20和用户21共享课程6但是如何通过输入ID而不使用PHP循环结果来获取SQL?
答案 0 :(得分: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的SELECT中来在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(false)或1(true)。
答案 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,则不分享任何课程。
答案 2 :(得分: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)
答案 3 :(得分: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 )
答案 4 :(得分:0)
这是显示来自相同组的用户的查询。
SELECT
*
FROM
jos_gj_users T1
INNER JOIN jos_gj_users T2 ON T1.id_group = T2.id_group
答案 5 :(得分:0)
尝试一下 - 它接受第一个粗体区域中的输入参数,并根据第二个粗体区域中的值通过CASE语句返回值TRUE或FALSE。
选择DISTINCT案例时 (SELECT DISTINCT COUNT(id_group)FROM jos_gj_users WHERE id_user IN (20,21)
GROUP BY id_group
有COUNT(DISTINCT id_user)= 2)IS NOT NULL,然后'TRUE'
ELSE 'FALSE'
END
来自jos_gj_users