Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将这些查询转换为子查询?_Sql_Subquery_Inner Query - Fatal编程技术网

Sql 如何将这些查询转换为子查询?

Sql 如何将这些查询转换为子查询?,sql,subquery,inner-query,Sql,Subquery,Inner Query,如何将其转换为单个查询。我提出了以下质疑: $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'];

如何将其转换为单个查询。我提出了以下质疑:

$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 />";
            }
        }
}
请尝试此查询

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
选择m.subject、m.msg、m.owner\u id、u.name
来自消息作为m,消息作为mu,用户作为u
其中m.id=mu.msg\u id和mu.user\u id=以及msg=和u.id=mu.userId
按日期订购信息说明
我已加入所有表,以便返回所有必需的字段

尝试此查询:

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_用户和message表的结构是什么?为什么你想把它们都连接起来

编辑:这个怎么样

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个查询更有效)

开发消息通信系统消息表,其中包含发送者信息和消息用户表,其中包含消息接收者。在这段代码中,您试图获取所有消息及其所有者,然后打印到列表中,不是吗?在这种情况下,您真的需要从消息用户处获取数据吗?如果这是您想要的,请将此答案标记为正确答案,因为查询不正确。把它放在:
$userlist=mysql\u query(“…”)或die(mysql\u error())您将看到错误。
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