【问题标题】:Can Inner join be used effeciently with RIGHT or LEFT Join together in single mysql queryInner join 可以与 RIGHT 或 LEFT Join 一起在单个 mysql 查询中有效使用吗
【发布时间】:2017-11-14 08:04:44
【问题描述】:

我正在编写 php-mysql 脚本并有两个表,即消息和成员。这些表格中的数据例如如下所示:

消息表:

_________________________________________________________________
|m_id| from_id | to_id | msg_subject | msg_body     | sent_time  |
------------------------------------------------------------------
| 1  |    142  |  335  |    hello    |  how are you | 2017-25-10 |
------------------------------------------------------------------
| 2  |    225  |  443  |    hi       |  whats up..  | 2017-26-10 |
------------------------------------------------------------------
| 3  |    332  |  110  |    urgent   |  call me now | 2017-27-10 |
------------------------------------------------------------------

和成员表:

______________________________________________________________
| id   | username | f_name  |  l_name   |   city    | gender  |
---------------------------------------------------------------
| 110  |    joe   |  Joe    |    Tom    |  Rome     |    M    |
---------------------------------------------------------------
| 142  |    alb_p |  Albert |    Paul   |  Milan    |    M    |
---------------------------------------------------------------
| 225  |    ruby  |  Ruby   |    Hinge  |  Paris    |    F    |
---------------------------------------------------------------
| 332  |    ram   |  Ram    |    Sharma |  Delhi    |    M    |
---------------------------------------------------------------
| 335  |   kris   |  Kity   |    Krin   |  Milan    |    F    |
---------------------------------------------------------------
| 443  |    reema |  Reema  |    Pink   |  Dubai    |    F    |
---------------------------------------------------------------

现在我希望这些表以这种方式加入 mysql 查询(或在 mysql 中使用两个 select),以便我应该获取每个 from_id 和 to_id 的用户名、f_name、l_name、城市和性别数据。而且我还应该得到 msg_subject、msg_body 和 sent_time。我在 while 循环中使用另一个 mysql 查询得到了这个,由于超过 500 行的性能问题,我不想使用它。最后,我想在 Web 浏览器中使用 html 显示以下类型的输出:

_____________________________________________________________________________
|m_id|  Message       |   Message      | Message  |   Message    | Msg Sent |
|    | From Member    |   To Member    | Subject  |   Details    |  On Date |    
-----------------------------------------------------------------------------
|    |ID: 142         | ID: 335        |          |              |          |
|    |UserName: alb_p | UserName: kris |          |              |          |
|    |1st Name:Albert | 1st Name: Kity |          |              |          |
| 1  |Last Name: Paul | Last Name: Krin|  hello   | how are you  |2017-25-10|
|    |City: Milan     | City: Milan    |          |              |          |
|    |Gender: Male    | Gender: Female |          |              |          |
-----------------------------------------------------------------------------
|    |ID: 225         | ID: 443        |          |              |          |
|    |UserName: ruby  | UserName:reema |          |              |          |
|    |1st Name:Ruby   | 1st Name:Reema |          |              |          |
| 2  |Last Name:Hinge | Last Name:Pink |  hi      | Whats up..   |2017-26-10|
|    |City: Paris     | City: Dubai    |          |              |          |
|    |Gender: Female  | Gender: Female |          |              |          |
-----------------------------------------------------------------------------

等等...对于 m_id 行号。 3 还有..

我正在使用 while 循环中的另一个 mysql 查询得到这个 html 表格样式的输出,但我想在单个 mysql 查询中使用双选或两个连接来实现这一点。请给我建议的方式并给我mysql查询的详细信息..提前谢谢..(也透露我只是php-mysql编程的初学者..)

【问题讨论】:

  • 这里没有太多所谓的脚本
  • 是的。如果存在大量条件,则所有连接类型都可以在 sql 查询中有效使用。但公平地说,有一条不成文的规则,即不需要(也不会)使用“右连接”,因为可以将查询重组为使用左连接。

标签: php mysql sql inner-join


【解决方案1】:

对“from member”和“to member”使用 2 个左连接的示例

select
       m.*, from_men.username, to_mem.username
from messages m
left join members as from_mem on m.from_id = from_mem.id
left join members as to_mem   on m.to_id = to_mem.id

【讨论】:

  • 感谢 Used_By_Already 我已经得到您并理解查询,但也请告诉我如何进一步移动以获取数组中的这些值并使用 while 循环显示这些值最终显示在浏览器中。请详细说明代码以显示想要的结果。非常感谢!
  • 我对 php 无能为力。建议你找个教程。
  • 好的,谢谢 Used_By_Already,我已经完成并自己编写了其余代码。感谢您对左连接概念的帮助。我的工作完成了。
  • 你知道“接受”吗?接受“Click the Tick”以获取更多信息,请参阅help/accepting
  • 接受...点击右勾
猜你喜欢
  • 2015-08-25
  • 1970-01-01
  • 2013-05-02
  • 2020-03-07
  • 2015-01-10
  • 2018-07-10
相关资源
最近更新 更多