如何在不同的表上选择相应的数据?

时间:2013-01-27 09:30:42

标签: php jquery mysql sql database

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

消息表

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

我该如何做到这一点?

4 个答案:

答案 0 :(得分:2)

对于您的数据,查询将是

 $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)

结果数据将是一个类似于您要求的数组。

答案 1 :(得分: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指的是相同的。您需要两次使用用户表的原因是您的接收者和传感器都是用户表中的用户。所以说你需要为coressponding名字添加正确的列别名:)“

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您必须在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

上述声明未经过测试,只需评论是否存在任何问题。