我在输出我网站的垃圾邮件部分时遇到了一些麻烦,原因是因为我试图从一个选择查询中的两个不同的表中获取数据,我知道这很容易做到,但对于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'
答案 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; }