我是一名新程序员,我不知道该怎么做。
我有:
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_id
是cust_id
授权销售人员的代理商。因此,我需要能够在此cust_id
下仅为此特定agent_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";
答案 0 :(得分:1)
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)
答案 1 :(得分:1)
通常情况下,查询将从您的标准根目录的核心表开始...例如单个客户并从中加入...您还声明您希望所有代理商的所有产品/服务,包括“我“代理商,您不希望对'$ 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”子句中的FIRST表,你将添加一个WHERE子句并将标准放到该表中......对于其他人,如代理和产品服务,我有[[criteria]],你可以在那里扩展你的整个标准(每个表加入其中)。
例如您的[[产品服务条件]],我可以添加类似
的内容AND ( ( ps.Item like '%$something'
OR ps.Item like '%$another'
OR ps.Item like '%$more' )
AND ps.OtherField = whatever )
保持您的主要“加入”条件,首先确定表格之间的关系...只有那么您是否要添加限制标准...正如您在上面的示例中所看到的,我已经包装了括号内的整个AND()子句将其视为单个“单元”条件...例如产品/服务表。
希望此示例可以帮助您将来查询。