之前我问了一个类似的问题,但删除了它,因为我无法正确解释。这完美地表明了它。
我有4张桌子:
-
Clients table has: id, client_id, client_name
Agents table has: id, agent_id, agent_name
Client_agent_approvals has: id, client_id, agent_id
subscriptions has: id, sales_id, client_id, agent_id
不,我如何构建这个查询,以便我可以让我的销售代理查看其他代理商购买了哪些其他产品的客户。我认为正确的步骤是包含client_agent_approvals表,因为它将包含其client_id列表以及其他任何人也是它们的代理。
我该怎么做?
更新:
在得到一些asnwers后我尝试了这个:
$sql="SELECT s*
FROM Client_agent_approvals caa
INNER JOIN Subscriptions s ON s.client_id = caa.client_id
WHERE caa.agent_id = '$id'
AND s.agent_id <> '$id'";
$result=mysql_query($sql);
$query = mysql_query($sql) or die ("Error: ".mysql_error());
if ($result == "")
{
echo "";
}
echo "";
$rows = mysql_num_rows($result);
if($rows == 0)
{
print("");
}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{
$product = $row['product'];
print("Products they have are: $product");
}
}
我所看到的只是“他们拥有的产品是:”
现在什么是错误的?
答案 0 :(得分:2)
假设订阅是你要找的东西:
如果您了解客户和代理商:
SELECT *
FROM SUBSCRIPTIONS
WHERE CLIENT_ID = @THE_CLIENT_ID -- My client
AND AGENT_ID <> @THE_AGENT_ID -- But not my subscriptions
如果您只了解代理并想要所有客户:
SELECT *
FROM SUBSCRIPTIONS
WHERE AGENT_ID <> @THE_AGENT_ID -- Not my subscriptions
AND CLIENT_ID IN (
SELECT CLIENT_ID FROM SUBSCRIPTIONS WHERE AGENT_ID = @THE_AGENT_ID
) -- all my clients
然后适当加入以获取名字。
让我们首先在PHP之外使用它。从mysql命令行运行它时会得到什么?:
SELECT s.*
FROM Client_agent_approvals caa
INNER JOIN Subscriptions s
ON s.client_id = caa.client_id
WHERE caa.agent_id = SOME_ID -- Note no quotes should be around an INT
AND s.agent_id <> SOME_ID -- Note no quotes should be around an INT
如果这不起作用,请将数据转储到此处,以便我们可以看到数据和预期结果。
答案 1 :(得分:1)
您想要的只是代理商客户的所有销售,对吗?
-- assuming you've set @myagent to the agent_id you are looking for
SELECT s.*
FROM Client_agent_approvals caa
INNER JOIN Subscriptions s ON s.client_id = caa.client_id
WHERE caa.agent_id = @myagent
AND s.agent_id <> @myagent -- if you want to exclude agent's own sales