0

ずっと前にフォーラム用に作成したプロファイルウォールスクリプトの通知システムをコーディングしようとしています。私が抱えている問題は、PMの基準を満たす人にPMを1つだけ送信しようとしていることですが、PMを実行する必要がある人を見つけるためにMYSQLに2つのselectステートメントもあります。

選択できるテーブルが2つあります...log_statusesそしてlog_status_replies
これを達成しようとしています。一度だけコメントした方にお知らせしたいです!また、それが属する人の壁と人の壁にステータスを書いた人ですが、あなたがそれを書いた場合はあなた自身ではありません。ちょっと複雑なので、これを正しく行うのに苦労しています...

コメントした人を検索してPMを送信するための私のコードは次のとおりです。誰がステータスを書き、誰がそれを壁にしているのかをチェックする方法もあります。コメントした場合は、重複したPMを送信しません。

そうでなければ、彼らはコメントしたので、そして彼らのステータス/壁のためにPMを受け取るでしょう。それを理解していただければ幸いです。説明するのはちょっと難しいです。

これが私のソースコードです。助けてくれる人がいたらいいのにと思います。

$query = $smcFunc['db_query']('', '
    SELECT id_member, id_poster
    FROM {db_prefix}log_statuses
    WHERE id_status = {int:id_status}',
    array(
        'id_status' => $status,
    )
);
   list($id_member,$id_poster) = $smcFunc['db_fetch_row']($query);


if ($id_poster != $ucomment || $id_member != $ucomment)
{   

    $query2 = $smcFunc['db_query']('', '
        SELECT DISTINCT id_member
        FROM {db_prefix}log_status_replies
        WHERE id_status = {int:id_status}',
        array(
            'id_status' => $status,
        )
    );

    while ($row = $smcFunc['db_fetch_assoc']($query2)) {
        if ($row['id_member'] != $ucomment)
        {
            $pm_recipients = array(
                'to' => array($row['id_member']),
                'bcc' => array(),
            );

            require_once($sourcedir . '/Subs-Post.php');

            $notify_body = $txt['status_body'] . '[iurl]' .$scripturl . '?action=profile;area=showstatus;s=' . $status . '[/iurl]';
            $notify_body = str_replace("%poster",$context['user']['name'],$notify_body);

            $pm_from = array(
                        'id' => $ucomment,
                        'username' => '',
                        'name' => '',
                    );

            sendpm($pm_recipients,$txt['status_subject'] , $notify_body,false,$pm_from);
        }       
    }           
}   

$ id_memberは人の壁、$id_posterは壁に投稿した人です。$ucommentは投稿している人です。

4

2 に答える 2

0

解決しました。しばらくの間配列を作成し、他のテーブルをチェックして誰をPMするかを確認するときに、コメントテーブルから値が存在するかどうかをチェックしました。

    $id_comment = array();
            while ($row = $smcFunc['db_fetch_assoc']($query2)) {
            $id_comment[] = $row['id_member'];
    }

if (!in_array($id_poster, $id_comment) && !in_array($id_member, $id_comment)) {
     //Send PM
}
于 2013-01-26T19:32:01.557 に答える
-1

使用UNION

例えば::

Select column1 from table1 where condition1=true
UNION
Select column1 from table1 where condition2=true

結果セットには重複するレコードはありません。

偶然に、重複を含むすべての値が必要な場合は、UNION ALL

于 2013-01-26T17:40:56.337 に答える