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

时间:2017-07-21 01:43:06

标签: php mysql

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

更新:

表公司:

  • id:02姓名:Google

表格联系方式:

  • id:01姓名:John公司:02 - 与Google链接

表INFORMS:

  • id:01数据:部分数据联系方式:01 - 链接到约翰
  • id:02数据:部分数据联系人:01 - 另一个链接到约翰
  • id:03数据:部分数据联系方式:02 - 未与john相关联

我需要制作一个搜索查询,仅显示与GOOGLE相关联的通知,因此所有通知都链接到将GOOGLE作为公司的联系人。 SO告知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>";
}

2 个答案:

答案 0 :(得分:0)

可以做这样的事情

__init__

此问题也可能有用,因为蒂姆提到了运行时问题,建议只使用1个查询{INNER LEFT JOIN} select left join table use and condition

答案 1 :(得分:0)

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

鉴于此表架构:

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注入是一件坏事,use prepared statements。切勿在查询中使用'$ 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等工具来试验不同的查询。如果你擅长查询,你就不会循环遍历多个查询(随着你的表变得越来越大,效率非常低)。