Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何联接所有表?_Php_Mysql_Sql_Join_Relationship - Fatal编程技术网

Php 如何联接所有表?

Php 如何联接所有表?,php,mysql,sql,join,relationship,Php,Mysql,Sql,Join,Relationship,我是一个新的程序员,我不知道如何做到这一点 我有: 名为customers(cust\u id,name)的表 名为agents(agent\u id,agent\u name)的表 名为authorizations(客户id、代理id)的表 名为产品服务的表(p\U s\U id、客户id、代理id、项目名称、项目id) 关于授权表:代理id是客户id的授权销售人员的代理。因此,我需要能够在这个代理id下,仅提取这个特定客户id的结果 我需要做一个查询,返回客户在所有其他代理下拥有的所有产

我是一个新的程序员,我不知道如何做到这一点

我有:

  • 名为
    customers
    (cust\u id,name)的表
  • 名为
    agents
    (agent\u id,agent\u name)的表
  • 名为
    authorizations
    (客户id、代理id)的表
  • 名为
    产品服务
    的表(p\U s\U id、客户id、代理id、项目名称、项目id)
关于
授权
表:
代理id
客户id
的授权销售人员的代理。因此,我需要能够在这个
代理id
下,仅提取这个特定
客户id
的结果

我需要做一个查询,返回客户在所有其他代理下拥有的所有产品和服务。在搜索中,它还应该返回他们在我项下拥有的产品/服务

这就是我迄今为止所尝试的:

$sql = "SELECT 
          product_services.item_name, agents.agent_name,
          customers.name, agents.agent_id, product_services.item_id 
        FROM
          product_services 
        LEFT JOIN agents ON product_services.agent_id = agents.agent_id 
        LEFT JOIN customers ON product_services.cust_id = customers.cust_id 
        WHERE authorizations.agent_id = '$aid'
          AND  product_services.item_name LIKE '%$q%' 
        ORDER BY product_services.id DESC 
        LIMIT $start, $limit";
KPO

下面是我用来连接两个表的查询。这与查询相同,请注意从“LEFT JOIN”开始使用的语法

考虑到您的SQL查询最初是正确的,这应该适用于您的左连接部分:

LEFT JOIN(agents, customers
)ON( product_services.agent_id = agents.agent_id 
AND product_services.cust_id = customers.cust_id) 

通常,查询将以位于条件根的核心表开始。。。例如,一个单一的客户和加入从那。。。您还声明希望所有代理(包括“me”代理)提供所有产品/服务,您不希望在“$aid”标准上设置过滤器

SELECT STRAIGHT_JOIN 
      c.cust_id,
      c.name,
      ag.agent_id,
      ag.agent_name,
      ps.item_name,
      ps.p_s_id,
      ps.item_id
   from
      customers c
         join authorizations au
            on c.cust_id = au.cust_id
            [[ AND au.agent_id = '$aid' ]]
            join agents ag
               on au.agent_id = ag.agent_id
            join product_services ps
               on c.cust_id = ps.cust_id
              AND au.agent_id = ps.agent_id
              [[ AND ps.item_name like '%$q%' ]]
   order by
      ps.p_s_id DESC
   limit 
      $start, $limit
在上面的查询中,我在一节中列出了您可以应用

[[ AND agent criteria ]]
或产品/服务标准。但正如你所说的,你想要所有特工的所有活动,所以我把它漏掉了。。。同样地,以一种可能的方式

[[ AND product / service ]] 
可能/可能未提供的标准,您可以非常简单地将其删除

--按评论编辑反馈

根据您关于如何添加更多“标准”的询问,其依据是表格的来源。如果它是“FROM”子句中的第一个表,您将添加一个WHERE子句并将条件放入该表中。。。至于其他的,比如代理和产品服务,我有[[criteria]],你可以在那里扩展你的全部标准(根据它所连接的相应表)

例如您的[[产品服务标准]],我可以添加如下内容

AND (   (   ps.Item like '%$something'
         OR ps.Item like '%$another'
         OR ps.Item like '%$more' )
     AND ps.OtherField = whatever )
保留主要的“连接”条件,这些条件首先确定表之间的关系。。。只有这样,您才想添加限制条件。。。正如您在上面的示例中所看到的,我将整个AND()子句包装在括号中,将其视为单个“unit”条件。。。例如到产品/服务表


希望此示例对您将来的查询有所帮助。

对于与数据库相关的问题,这是一个很好的形式来说明您正在使用的数据库。从语法上看,它看起来像mysql到mesorry!我使用的是phpmyadmin。yes123的意思是,“phpmyadmin”是一个管理界面,而不是一个数据库。我猜你正在使用MySQL:)我仍然遇到同样的问题。问题是它向我显示了不在我之下的客户的结果。你的客户在ID之外是如何分开的?他们是按你的名字分组的吗?用户名?等等?用户名也包含在代理和客户表中。不知道为什么我没有在我的问题中包括这一点,如果您的表列像我的示例中那样是“username”,并说您的username是KPO。那么WHERE子句应该是:WHERE username='KPO';成功了!但是,我如何添加更多类似的想法;e、 例如“%$q%”之类的。谢谢Drapp,我似乎在这里创建了一个非常复杂的查询。由于某种原因,like函数不能正常工作。这是我夜间工作的时间。当我回来的时候,我会再次关注它。谢谢你的帮助,请留意我的更新谢谢@DRapp搜索的问题来自“AND au.agent_id=ps.agent_id”当我移除该约束时,搜索工作正常,但每个结果显示两次。。。不知道该怎么做来解决这个问题..在表名之后使用“au”“c”是否也很重要?@KPO。。。表名后面的“au”、“c”和“ps”用作表的“别名”。。。就像一条捷径。。。如果您正在执行长查询并且具有长表名,则可以对查询的其余部分(包括列名、联接等)应用“别名”,而不是重复键入长名称并出现键入错误(oops因素):)
AND (   (   ps.Item like '%$something'
         OR ps.Item like '%$another'
         OR ps.Item like '%$more' )
     AND ps.OtherField = whatever )