我遇到了一个无法解决的问题。我仍然是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 任何帮助将不胜感激。
答案 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}}。