【问题标题】:weird join in php奇怪的加入php
【发布时间】:2011-10-24 18:08:30
【问题描述】:

好的,所以我不是 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

或类似的东西......

【问题讨论】:

  • 你有没有想过使用视图?

标签: php mysql join


【解决方案1】:

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

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

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

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

【讨论】:

  • 美丽.. 这就像一个魅力,非常感谢自连接技术!我会马上选择你的答案。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 2023-04-04
      • 2013-04-06
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多