2013-03-01 54 views
0

如何将其制作为单个查询。我制定了以下查询:如何使这些查询进行子查询?

$msgs=mysql_query("select m.subject, m.msg from message as m, message_users as mu where m.id=mu.msg_id and mu.user_id=$u_id order by dateof_msg desc"); 
while($row1=mysql_fetch_array($msgs)) 
{ 
     $total_msg = $row1['msg']; 
     $own_id = mysql_query("select owner_id from message where msg='$total_msg' "); 
     while($o_id=mysql_fetch_array($own_id)) 
     { 
      $owners_id = $o_id['owner_id']; 
      $uname = mysql_query("select name from users where id='$owners_id'"); 

      while($username=mysql_fetch_array($uname)) 
      { 
       $sen_name = $username['name']; 
       echo $sen_name."&nbsp;&nbsp;".$owners_id."&nbsp;&nbsp;&nbsp;&nbsp;".$total_msg."<br />"; 
      } 
     } 
} 

由于查询的运行时间确实很慢。

我现在编辑的这样的代码,但它说mysql_fetch_array()节选参数1是资源布尔给出...

$userlist = mysql_query("select m.subject, m.msg, m.owner_id, u.name, u.id, mu.msg_id, mu.user_id from message as m, message_users as mu, users as u 
            m inner join u on (m.owner_id = u.id) 
            m inner join mu on(m.id=mu.msg_id) and 
            where mu.user_id='$u_id' order by dateof_msg desc") or mysql_error(); 
       while($row=mysql_fetch_array($userlist)) 
       { 
        $sendername = $row['name']; 
        echo $sendername; 
       } 
+0

这是因为该查询不正确。把这个:'$ userlist = mysql_query(“...”)或死(mysql_error());'你会看到错误。 – RainHeart257 2013-03-01 13:21:12

回答

0

试试此问题:

select m.subject, m.msg, m.owner_id, users.name 
from message as m, message_users as mu 
    inner join users on (message.owner_id = users.id) 
where m.id=mu.msg_id and mu.user_id=$u_id order by dateof_msg desc 

如果你向我解释你想做什么,我可以改进答案:message_users和消息表的结构是什么,你为什么要加入他们?

编辑:这是怎么回事?

select m.id, m.subject, m.msg, owner.id, 
    owner.name, receivers.id, receivers.name 
from message as m 
    inner join message_users as mu on (m.id = mu.msg_id) 
    inner join users as owner on (m.owner_id = owner.id) 
    inner join users as receivers on (m.user_id = receivers.id) 
where receivers.user_id=$u_id 
order by dateof_msg desc 

的问题是,你会得到一个排的每个消息和每个接收器,但用PHP,你可以组的信息(比一回路3次的查询更有效)

+0

开发消息通信系统消息表具有发送者的信息和message_users表具有谁是消息的接收者。 – AndRaGhu 2013-03-01 11:31:59

+0

而在此代码中,您试图获取所有消息及其所有者并将其列入列表中,是不是?在这种情况下,你是否真的需要从message_users获取数据? – RainHeart257 2013-03-01 11:39:22

+0

雅我需要从message_users表中得到接收者ID .. – AndRaGhu 2013-03-01 11:41:35

0

尝试此查询

select m.subject, m.msg, m.owner_id, u.name 
from message as m, message_users as mu, users as u 
where m.id=mu.msg_id and mu.user_id=<userId> and msg=<MESSAGE> and u.id = mu.userId 
order by dateof_msg desc 

我已经参加了所有所有必要的字段返回