多表选择查询错误

时间:2012-05-19 23:38:01

标签: php mysql html

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

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'

3 个答案:

答案 0 :(得分:1)

您正在使用cross join而不是union

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

更新

根据我链接的文档,union语句看起来像

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

答案 1 :(得分: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
}

每次都适合我。希望有所帮助!

答案 2 :(得分:0)

检查mysql_error()怎么样?或者只是使用phpMyAdmin?

手动对数据库运行mysql查询
$error = mysql_error();
if(!empty($error)){ echo 'errno: ' . mysql_errno() . ' msg: ' . $error; }