php - 如何连接所有表?

标签 php mysql sql join relationship

我是一名新程序员,我不知道该怎么做。

我有:

  • 名为customers(cust_id,name)的表
  • 名为agents(agent_id、agent_name)的表
  • 名为authorizations(cust_id、agent_id)的表
  • 名为 product_services 的表(p_s_id、cust_id、agent_id、item_name、item_id)

关于authorizations 表:agent_idcust_id 的授权销售人员的代理。因此,我需要能够仅提取此 agent_id 下特定 cust_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,

下面是我用来连接 2 个表的查询。对于您的查询来说是相同的,请注意从“LEFT JOIN”开始使用的语法

    SELECT 
    user.username,
    groups.group_id, groups.group_name,  
    sign.last_connected, sign.sign_id, sign.sign_name, sign.resolution_x, sign.resolution_y, LEFT(sign.sign_name, 1) AS first_char
FROM
    user
LEFT JOIN(
    groups, sign
)ON(
    user.user_id = groups.userID AND
    groups.group_id = sign.groupID
)
WHERE
    username = ? AND
    UPPER(sign.sign_name) BETWEEN "A" AND "Z"
    OR sign.sign_name BETWEEN "0" AND "9" ORDER BY sign.sign_name

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

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

关于php - 如何连接所有表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272005/

相关文章:

php - Magento 2 : category Url Rewrite to Cms page

php - 如何设置 php 电子邮件表单正文的样式?

java - 向服务器发送大量文本的更好方法?

SQL 检查位标志

sql - 如何强制总列最后出现在 TRANSFORM SQL 语句中

php - 检查用户是否已经喜欢粉丝专页

javascript - 提交表单数据的 toggle() div 元素

mysql - Rails 无效的哈希密码在 ruby​​ 控制台中进行了身份验证,但重新打开后却没有进行身份验证。为什么?

php - 在 header() 之前完成运行 php 函数

php - 只需将此日期转换为正确的格式