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 />";
            }
        }
}

クエリの長​​さのため、実行は非常に遅くなります。

私は今このようにコードを編集しましたが、パラメータ1を除いてmysql_fetch_array()はリソースブール値が与えられていると言います...

$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;
                }
4

2 に答える 2

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

必要なすべてのフィールドが返されるように、すべてのテーブルを結合しました

于 2013-03-01T11:21:31.650 に答える
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

問題は、各メッセージと各受信者に対して 1 つの行を取得することですが、PHP を使用すると、情報をグループ化できます (ループ内の 3 つのクエリよりも効率的です)。

于 2013-03-01T11:24:54.707 に答える