多表选择查询错误


Multiple table select query error

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

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'

您正在执行cross join而不是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}
我认为

你错过了一步。你必须做:

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

每次都对我有用。希望对您有所帮助!

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

$error = mysql_error();
if(!empty($error)){ echo 'errno: ' . mysql_errno() . ' msg: ' . $error; }