Php MYsql的使用与条件

Php MYsql的使用与条件,php,mysql,cakephp,cakephp-1.3,Php,Mysql,Cakephp,Cakephp 1.3,我需要的是:当我提供training_id 172和training_id 174时,它必须只返回用户150 我试过了,但没用 SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174 大多数情况下,培训id可能超过2次,请执行以下操作 SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_i

我需要的是:当我提供training_id 172和training_id 174时,它必须只返回用户150

我试过了,但没用

SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174
大多数情况下,培训id可能超过2次,请执行以下操作

SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)
这应该起作用:

SELECT a.user_id FROM Training_users a, Training_users b WHERE a.training_id = 172 and a.user_id = b.user_id AND b.training_id = 174;
那么这个查询呢:

SELECT user_id, COUNT(*) as nbTrainings FROM Training_users
WHERE training_id = 172 OR training_id = 174
GROUP BY user_id
HAVING nbTrainings = 2
它将过滤接受培训172或174的用户。然后它将统计每个用户返回的培训次数,并仅保留一次培训和两次培训

这假设用户不能有多个培训172和/或174

与多个自联接相比,这种方法的优点是,如果要使用2个以上的训练id进行筛选,则不必为每个训练id多次联接

有关
分组依据
拥有

编辑:在SQLFIDLE中进行测试后,如果一些用户有多个培训id,并且其中一个是172或174,则这似乎有效,并且不会返回错误的值

工作

这应该可以做到:

SELECT
  a.user_id
FROM
  Training_users a
RIGHT JOIN
  Training_users b ON a.user_id = b.user_id AND b.training_id = 174
WHERE
  a.training_id = 172

检查此表中的主键是什么?用户id和培训id。问题是您的主键都在这两个字段上,因此只有这两个字段存在唯一性,因此您的查询方法无法工作。您的查询中也需要有user\u id(
其中user\u id=150
)请解释您的问题。给定的示例使您的问题变得混乱。您希望user
150
作为回报。换句话说,您是否希望
training\u id
s上最新的
user\u id
也会返回另一个用户ids@iiro未指定所需的唯一用户id@Vineet1982“它必须只返回用户150”这就像->从Training_users中选择user_id,其中Training_id在(172174)中,我也认为这是一种解决方案。让我们看看这是否足够。我放弃了这个,因为可以有一行用户1->172和65,然后是用户2->174和42。这个查询应该同时输出用户1和用户2。@iiro:刚刚在SQLFIDLE中测试过,这似乎有效。除了172/174中的培训之外,它不计算其他培训的数量,因为这些行已经被过滤掉了。哦,是的,你是对的:)谢谢你,我的朋友,我想这可能有用。我必须尝试返回多个用户,看看它是否有效:)
select user_id from work where training_id in (172,174) group by user_id  having count(*)  > 1;