mysql - 从表中选择存在数组所有值的行

标签 mysql

我有一个检索 id + NAME 列表的查询:

$sql = "SELECT id FROM #__table1 ";

$sql .= " WHERE (";
foreach($explode_tags as $k=>$explode_tag) {
  $sql .= "name = ".$db->Quote(trim($explode_tag));
  if(($k+1) != count($explode_tags))
  $sql .= " OR ";
}
$sql .= ")";        

$db->setQuery($sql);
$results = $db->loadResultArray();  

结果是一个像这样的数组:

keywordID    |    NAME
1                 cat
2                 dog
3                 horse

现在我有这个表2:

id   |    ItemID    |    keywordID
1            4              1
2            4              2
3            4              3
4            6              1
5            6              2
6            7              1

我想从表 2 中查找包含在表 1 中找到的所有关键字 ID 的所有 ItemID。 在上面的示例中,我只想返回包含所有关键字(全部 3 个)的 itemID 4。

我正在运行此查询,但没有得到结果:

...
$query .= " AND i.id IN (SELECT itemID FROM #__table2 WHERE (";
foreach($results as $k=>$result) {
$query .= "keywordID = ".(int)$result;
if(($k+1) != count($results))
$query .= " AND ";
}
$query .= "))";     

最佳答案

更新

抱歉,我错过了阅读您的问题。我使用这些数据做了简单的测试:

id  itemId  keywordId
1   4       1
5   4       2
6   4       3
7   5       2
8   5       3
9   6       1
10  6       2
11  6       3
12  7       3
13  9       3
14  9       2
15  9       1

并使用此查询:

SELECT itemId, GROUP_CONCAT( keywordId ORDER BY keywordId ) AS crpcnct, COUNT( itemId ) 
FROM  `temporary_table_123` 
GROUP BY 1 
HAVING crpcnct =  '1,2,3' 

我可以得到你想要的值:

itemId  crpcnct  count(itemId)
4       1,2,3    3
6       1,2,3    3
9       1,2,3    3

要实现此目的,您所要做的就是构建要使用的keywordID:

$keywordIds[] = $results['keywordId'];

然后升序排序

sort($keywordIds);

最后一步是,将此数组提供给查询:

SELECT itemId, GROUP_CONCAT( keywordId ORDER BY keywordId ) AS crpcnct, COUNT( itemId ) 
FROM  `temporary_table_123` 
GROUP BY 1 
HAVING crpcnct =  '" . implode(",", $keywordIds) . "'

给你了。

关于mysql - 从表中选择存在数组所有值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297374/

相关文章:

mysql - mysql中多删除和多表删除哪个更快?

java - JPA hibernate : generation type sequence always inserts 0 into column

php - 如何使用动态数据和谷歌图表?

php - 如何显示每 K(代表千克)的大数字?

mysql - SQL 禁用触发器

php - 数据库查询结果来自不同的变量,原因是什么?

mysql - 如何解决 Xampp phpMyAdmin 和 MySQL 的空白错误

php - 可扩展的 Webstat 跟踪

php - MySQL 在两个日期之间选择未按预期工作

php - 我如何在我的类中声明 Mysqli Connection 全局?