奇怪的加入PHP

时间:2011-10-24 18:08:30

标签: php mysql join

好吧所以我不是PHP的新手,也不是MySQL的新手或加入......但是我必须要做的,我不能完全确定没有运行foreach将数据注入我的内容当前数组...

所以,我有一个像这样的联接:

SELECT `priorities`.`pri_name`, `agent_status`.`sta_title`, `specializations`.`spec_title`, `agents`.*
FROM (`agents`)
JOIN `priorities` ON `priorities`.`id` = `agents`.`priority`
JOIN `agent_status` ON `agent_status`.`s_id` = `agents`.`user_status`
JOIN `Specializations` ON `specializations`.`id` = `agents`.`Specialization`
WHERE `agents`.`id` =  '4';

现在,我需要再添加一个连接,这在正常情况下不会成为问题。但我需要弄清楚的是,在这个单一查询中我如何在同一个表上创建一个连接但是不同的记录。

所以基本上我需要选择的是第二条记录的f_name,l_name,其中id与初始选定记录的pid相同...所以就像添加到我的选择中一样:

agents.f_name AS pf_name, agents.l_name AS pl_name

然后有类似......

JOIN('agents' ON agents.id = agents.p_id

或类似的......

3 个答案:

答案 0 :(得分:2)

您可以为此使用带有别名的自联接。作为示例,请考虑以下代码:

SELECT
   a.*, b.*
FROM
   table AS a
   JOIN table as b
WHERE
   a.id = b.pid

使用此代码示例,您应该能够将其应用于现有查询。

在现有查询中,您应该使用您用于表的别名更改代理表字段引用的前缀agents,因此agentspriority应该成为别名.priority。

答案 1 :(得分:1)

您可以根据需要使用表别名并连接同一个表(当然,不超过允许的最大连接数):

FROM agents a1
JOIN agents a2 ON ([condition])
JOIN agents a3 ON ([condition])

答案 2 :(得分:0)

关键是使用不同的名称对agents表的第二个引用进行别名。在我的示例中,我将使用a2作为别名。

SELECT ..., a2.f_name AS pf_name, a2.l_name AS pl_name
...
JOIN agents a2
    ON agents.p_id = a2.id
...