从sql数据库获取数据,然后通过php使用它进行选择查询

时间:2013-12-17 19:56:54

标签: php mysql sql

我有这个分配表:

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,所以有很多东西需要学习:)

2 个答案:

答案 0 :(得分:1)

您最好的选择是使用GROUP BYCOUNTHAVING的组合来获得您想要的内容

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)");