0

ウェブサイトのメールゴミ箱セクションを出力するのに少し問題があります。これは、1つの選択クエリで2つの異なるテーブルからデータを取得しようとしているためです。簡単に実行できることはわかっていますが、何らかの理由でエラーが発生し続けるようにしてください

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Arken\mail.php on line 285

これが選択のためのコードの上部です(ステートメントの分割の理由はページ付けの使用のためです)

$trash_statement = "user_inbox, user_outbox WHERE (user_inbox.receiver_user_id='$user_id' AND user_inbox.mail_deleted ='1') OR WHERE (user_outbox.sender_user_id='$user_id' AND user_outbox.mail_deleted ='1')";

そして、これがページのメインセクションにあるコードです

<?php 
      $query = mysql_query("SELECT * FROM {$trash_statement} LIMIT {$startpoint} , {$limit}");

      while($row = mysql_fetch_assoc($query)) : ?>

その後は、レコードを表示するためのphp/htmlだけです。

問題を引き起こしている可能性のあるものについてのアイデアは、私はすべてを試しました。

ありがとう

編集:わかりました、SQLでもう一度試してみましたが、正しい結果が得られました。これは、user_inboxから3、user_outboxから2であるはずですが、何らかの理由で結果を複製しているため、user_inboxに対しては3つのレコードを2回、user_outboxから2つのレコードを3回取得しています。つまり、5つだけを取得する必要があるのに12の結果を取得しています。これが新しいクエリです。SELECT * FROM user_inbox, user_outbox WHERE user_inbox.receiver_user_id='4' AND user_inbox.mail_deleted ='1' AND user_outbox.sender_user_id='4' AND user_outbox.mail_deleted ='1'

4

3 に答える 3

1

あなたは のcross join代わりに をやっていますunion

を使用するcross joinと、条件に一致する受信ボックス/送信ボックス レコードの組み合わせごとに 1 つの結果が得られますwhere。2 つのインボックスの一致と 3 つのアウトボックスの一致があるため、6 つの結果が得られます (各結果には、1 つのインボックスの結果と 1 つのアウトボックスの結果が含まれます)。送信トレイではなく受信トレイで削除されたものがある場合、削除が 1 つあったとしても、クエリの結果は得られません。

アップデート

リンクしたドキュメントによると、ユニオンステートメントは次のようになります

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

あなたのテーブル構造がわからないので、正確なクエリを提供することはできません。データがインボックス テーブルからのものかアウトボックス テーブルからのものかがわかるように、おそらくフラグを含めることをお勧めします。何かのようなもの:

(SELECT 0 AS inoutFlg, receiver_user_id AS user_id, mail_deleted
 FROM user_inbox
 WHERE receiver_user_id = '4' and mail_deleted = 1)
UNION ALL
(SELECT 1 AS inoutFlg, sender_user_id AS user_id, mail_deleted
 FROM user_outbox
 WHERE sender_user_id = '4' and mail_deleted = 1)
LIMIT {$startpoint} , {$limit}
于 2012-05-20T04:16:07.763 に答える
0

私はあなたが一歩を逃していると思います。あなたはしなければならない:

$query = "whatever query";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
    //whatever you want to do here...
    //$row['column name'] is the format of the data that you'd be getting
}

それは毎回私のために働きます。お役に立てば幸いです。

于 2012-05-19T23:43:40.807 に答える
0

mysql_error() をチェックしてみてはどうですか? または、phpMyAdmin を使用して DB に対して手動で mysql クエリを実行するだけですか?

$error = mysql_error();
if(!empty($error)){ echo 'errno: ' . mysql_errno() . ' msg: ' . $error; }
于 2012-05-19T23:53:00.367 に答える