0

我在输出我网站的邮件垃圾部分时遇到了一些麻烦,原因是我试图在一个选择查询中从两个不同的表中获取数据,我知道这很容易做到,但出于某种原因,每当我尝试我不断收到错误

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 条记录两次,从 user_outbox 我得到 2 条记录 3 次,这意味着我得到 12 个结果,而我应该只得到 5 个。这是新查询有什么想法吗?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

你正在做 across join而不是 a union

使用一种cross join方法,您可以获得与您的where条件匹配的收件箱/发件箱记录的每个组合的一个结果。由于您有 2 个收件箱匹配项和 3 个发件箱匹配项,因此您将获得 6 个结果(其中每个结果包含一个收件箱结果和一个发件箱结果)。如果您在收件箱中删除了某些内容,但在发件箱中没有删除,那么即使您删除了一次,您的查询也不会得到任何结果。

更新

根据我链接的文档,联合声明看起来像

(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

检查 mysql_error() 怎么样?或者只是使用 phpMyAdmin 对数据库手动运行 mysql 查询?

$error = mysql_error();
if(!empty($error)){ echo 'errno: ' . mysql_errno() . ' msg: ' . $error; }
于 2012-05-19T23:53:00.367 回答
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 回答