我之前也问过类似的问题,但是因为无法正确解释,所以删掉了。这完美地说明了这一点。
我有 4 个表:
- 客户
- 代理
- Client_agent_aprovals
- 订阅
-
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_ids 列表以及其他人也是他们的代理人。
我该怎么做?
更新:
在得到一些答案后我尝试了这个:
$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");
}
}
我只看到“他们拥有的产品是:”
现在出了什么问题?
最佳答案
假设订阅是您正在寻找的东西:
如果您认识客户和代理:
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
如果这不起作用,请将数据转储到此处,以便我们可以看到数据和预期结果。
关于mysql - 如果您没有所需的变量,如何从数据库中选择字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7113348/