我有这个分配表:
PROJECT_ID | NAME_ID
1 1
1 2
2 1
2 2
我的PHP代码如下所示:
<html>
<body>
<?php
mysql_connect("xxx","xxx","xxx")
or die ("Connection failed");
mysql_select_db("xxx")
or die ("Connection failed");
$res = mysql_query("SELECT PROJECT_ID FROM Projects_Names WHERE NAME_ID=1 AND 2");
$num = mysql_num_rows($res);
echo "$num Projects found<br />";
while($dsatz = mysql_fetch_assoc($res))
{
echo $dsatz["PROJECT_ID"] . "<br />";
}
?>
这将给我以下输出:
2 Projects found
1
2
到目前为止一切顺利。但我基本上想要的是找出员工1和员工2都参与的项目名称。我还有两个表。具有项目名称,ID等的项目表...以及具有名称,ID等的员工表...
我现在基本上想说:
“在Projects表中查找刚刚作为输出的ID(1,2)并给我这些项目的名称”
我希望有人会就如何解决这个问题给我一些意见,我昨天刚开始使用sql + php,所以有很多东西需要学习:)
答案 0 :(得分:1)
您最好的选择是使用GROUP BY
与COUNT
和HAVING
的组合来获得您想要的内容
SELECT project_id, COUNT(DISTINCT name_id) AS `name_count`
FROM projects_names
WHERE name_id IN (?,?,...)
GROUP BY project_id
HAVING `name_count` = n
在这里,您将列出您感兴趣的所有name_id值,n
将等于搜索的name_id值的数量。因此,如果您正在寻找name_id 1和2,那么您将使用n = 2.这意味着找到id为id的所有项目,但也可能涉及其他name_id(这些不会包含在计数中)他们被过滤掉了。)
答案 1 :(得分:0)
这是错误的语法。你应该像这样单独写它:
$res = mysqli_query($con, "SELECT PROJECT_ID FROM Projects_Names WHERE NAME_ID=1 AND NAME_ID = 2");
或使用in
$res = mysqli_query($con, "SELECT PROJECT_ID FROM Projects_Names WHERE NAME_ID in (1,2)");