【问题标题】:How to select corresponding data on a different table? [closed]如何在不同的表上选择相应的数据? [关闭]
【发布时间】:2013-01-27 09:30:41
【问题描述】:

我正在尝试为我的大学项目创建一个小消息系统。因为所有消息都存储在一个表中,而与用户相关的数据则存储在一个单独的表中。现在我想先选择一个消息范围,然后找到与所选范围相关的相应用户名。最后将这些数据放在一个数组中。

消息表

Message_id | Sender_id | Receiver_id | Title    | Message
1          | 45        | 20          | Testing  | Hello
2          | 10        | 20          | Testing2 | Hi

用户表

User_id    | First_name  | Last_name | Email | Password
10         | David       | Chang     |dd@bb  | asddsf
.
.
20         | Denis       | Peter     |ff@dd  | sdfsd
.
45         | Night       | Hero      |gg@ll  | asdsa

现在我想将所有数据放入这样的数组中。

Message_id=>1
Sender=>David
Receiver=>Denis
Title=>Testing
Message=>Hello

我怎样才能做到这一点?

【问题讨论】:

  • 在SQL查询方面,如何定义消息的范围?你的标准是什么?
  • 嗯,你想要 message_id 为 1 的消息,所以发件人必须是 Night 而不是 david.. 希望这是一个错字
  • @bonCodigo 使用类似这样的东西 SELECT * FROM messages_table WHERE Receiver_id ='20'
  • @tomexsans 是消息 1 发件人必须是 Night Not David。

标签: php jquery mysql sql database


【解决方案1】:

对于您的数据,查询将是

 $qry = 'SELECT Message_id, a.First_name as Sender, b.First_Name as Receiver, Title, Message
         FROM Message m
         JOIN User a on a.user_id = m.sender_id
         JOIN User b on b.user_id = m.received_id
         WHERE m.Message_id = 1';

$result = mysql_query($qry)

生成的数据将是一个符合您要求的数组。

【讨论】:

  • 非常感谢@don,这正是我想要的。这也很容易理解。
【解决方案2】:

这里是问题的 SQL 部分供您尝试:

查询:

select m.message_id, u.First_Name as Receiver, 
s.First_Name as Sender, m.Title, m.Message
from User u
inner join Message m
on m.receiver_id = u.user_id
inner join User s
on m.sender_id = s.user_id
where m.message_id = 1 //-- your condition
group by m.message_id
;

结果基于您在问题中的样本数据:

| MESSAGE_ID | RECEIVER | SENDER |   TITLE | MESSAGE |
------------------------------------------------------
|          1 |    Denis |  Night | Testing |   Hello |

在 MYSQL 中 JOININNER JOIN 指的是相同的。您需要使用用户表两次的原因是您的接收器和感应器都是用户表中的用户。也就是说,您也需要为对应的名字添加正确的列别名:)

【讨论】:

【解决方案3】:

您必须像这样在 SQL 查询中使用 JOIN:

SELECT msg.Message_id, sender.First_name, receiver.First_name, msg.Title, msg.Message
FROM table_one as msg
JOIN table_two AS sender ON msg.Sender_id = sender.User_id
JOIN table_two AS receiver ON msg.Receiver_id = receiver.User_id

以上陈述未经测试,如果有任何问题,请发表评论。

【讨论】:

    【解决方案4】:
    SELECT 
      m.message_id, m.title, m.message, 
      u.first_name AS sender, u2.first_name AS receiver
    FROM message AS m 
    INNER JOIN user AS u ON u.user_id = m.sender_id 
    INNER JOIN user AS u2 on u2.user_id = m.receiver_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多