如何在不使用AND

时间:2016-06-14 13:35:02

标签: php mysql

我遇到了一个无法解决的问题。我仍然是SQL的初学者,并且不知道我应该如何解决这个问题。

这是一个例子

如果我的数据库看起来像这样:

id  tags_id clients_id

1   10      1
2   10      2
3   11      1
4   12      3

现在我的查询如何能够获得client_id 1的结果? 我不能使用AND,因为行是分开的,所以不行。我也尝试过使用这个查询:

 SELECT * FROM tags WHERE tags_id IN (10, 11);

这将返回client_id 1 AND 2但我只想要1。

它基本上必须看起来像这样然后工作:

SELECT * FROM tags WHERE tags_id = 10 and 11 

并且必须返回clients_id 1 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用IN的解决方案是正确的,但您似乎有语法错误。

尝试删除条件周围的单引号。

SELECT * FROM tags WHERE tags_id IN (10, 11);

使用您的示例样式的PHP代码,这将是:

$sql = 'SELECT * FROM tags WHERE tags_id IN ('.implode(',',$criteria['tagList']).');';

请注意,tags_id列名称不包含在引用中。

更新的答案:

假设您的表只包含唯一关系,其中一种更简单的方法是仅保留client_ids的行与您在IN子句中的tags_id数相同的次数。

SELECT client_id, 
       COUNT(client_id) AS client_count
FROM adlibris_odladev.test 
WHERE tags_id IN (10, 11)
GROUP BY client_id
HAVING client_count = 2;

我们在这里做的是计算每个client_id匹配的次数,并使用HAVING过滤掉结果集中不存在2次的所有client_id。

要使用PHP实现此动态,您希望将(10, 11)子句替换为您之前使用的implode(',', $ids)和使用2的{​​{1}}。