PHP MYSQL搜索用户,在另一个搜索中具有特定字段

PHP MYSQL搜索用户,在另一个搜索中具有特定字段,php,mysql,Php,Mysql,我有这个: 我有联系人的表,每个联系人都链接到一个公司,公司在另一个表中。 然后我有一个通知表,其中有一个带有一些数据的通知列表,每个人都链接到一个联系人。 我需要做一个sql,它过滤通知列表,但只显示特定公司的通知,因此它必须搜索具有相同公司的所有联系人,并显示该公司的通知。 有什么想法吗 更新: 表公司: id:02姓名:谷歌 表格联系人: id:01姓名:约翰公司:02-So链接到谷歌 表1说明: id:01数据:某些数据联系人:01-So链接到john id:02数据:某些数据联系人:0

我有这个: 我有联系人的表,每个联系人都链接到一个公司,公司在另一个表中。 然后我有一个通知表,其中有一个带有一些数据的通知列表,每个人都链接到一个联系人。 我需要做一个sql,它过滤通知列表,但只显示特定公司的通知,因此它必须搜索具有相同公司的所有联系人,并显示该公司的通知。 有什么想法吗

更新:

表公司:

id:02姓名:谷歌 表格联系人:

id:01姓名:约翰公司:02-So链接到谷歌 表1说明:

id:01数据:某些数据联系人:01-So链接到john id:02数据:某些数据联系人:01-另一个链接到john id:03数据:某些数据联系人:02-未链接到john 我需要做一个搜索查询,只显示链接到谷歌的通知,所以所有的通知都链接到以谷歌为公司的联系人。所以通知01和02 我正在尝试这样的东西,但不起作用:

$sql = "SELECT * FROM polar_companies WHERE id IN (SELECT * FROM polar_contacts WHERE Empresa = '$v_empresa');"
HERE I DONT KNOW HOT TO PERFORM A INFORM SEARCH
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo HERE I NEED THE INFORMS
}
} else {
    echo "<p>No informs</p>";
}

我可以做这样的事

$sql = "SELECT * FROM polar_company WHERE `name`='$name'";

$result = $conn->query($sql);
if ($result->num_rows > 0) {
    $n = 1; 
    $row = $result->fetch_assoc(MYSQLI_ASSOC);
    $company_id = $row['id'];
    $query = "SELECT * FROM polor_contact WHERE `company`='$company_id'";
    $contact_result = $conn->query($query);
    while ($contact_row = $contact_result->fetch_array(MYSQLI_ASSOC)) {
        $contact_id = $contact_row['id'];
        $query = "SELECT * FROM `polor_informs` WHERE `contact_id`='$contact_id'";
        $informs_result = $conn->query($query);

        while ($informs_row = $informs_result->fetch_array(MYSQLI_ASSOC)) 
        {
            $informs[$n] = $informs_row;
            $n++;
        }
    }
}
print_r($informs);
} else {
    echo "<p>No informs</p>";
}
此外,这个问题可能很有用,因为tim提到了运行时问题,并建议只使用1个查询{INNER LEFT JOIN}

首先,您需要一个将表链接在一起的查询

给定此表架构:

Companies         Contacts         Informs
---------         --------         -------
company_id --+    contact_id --+   inform_id
name         |    name         |   some_data
             +--  company_id   +-- contact_id
这样做您的查询:

$sql = "SELECT informs.* " .
       "FROM companies, contacts, informs " . 
       "WHERE companies.company_id=contacts.company_id AND " . 
       "      contacts.contact_id=informs.contact_id AND " . 
       "      companies.company_id=?";
绘制模式使形成查询变得更加容易。查看每个表如何相互连接

因为SQL注入是一件坏事。切勿在查询中使用“$some_variable”进行查询

// assuming you have already made connection
// assuming you assign $company_id

$result = $db->prepare($sql);
$result->execute(array($company_id));

$rows = $result->fetchAll();

建议您使用phpMyAdmin等工具来试验不同的查询。如果你擅长进行查询,你就不会在多个查询中循环,这是非常低效的,因为你的表越来越大。

我没有什么好主意,因为我看不到你的数据。请花点时间在这里展示一些示例数据,最好是预期输出。堆栈溢出不是免费的代码编写服务。我讨厌看到问题却没有代码。这表明你自己没有付出任何努力。请帮助我使用此代码,但我没有代码。没有你的代码,没有我的代码hehe至少显示数据结构。。。给它一个机会,告诉我们你阻挡的地方。这是一个值得回答的问题对不起。我的代码是用另一种语言编写的,我认为这很难理解。您需要的是一个基本的sql查询。选择通知。*从通知、联系人、公司中选择通知。联系人=联系人。id和联系人。公司=公司。id和公司。id=?是的,您可以这样做。但是,如果列表非常大,则随着数据集的增加,运行时间将呈指数增长。顺便说一句,适当的缩进确实有助于答案的可读性。此外,即使您在查询中输入的变量来自数据库,但最好始终使用准备好的语句。