Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多表选择查询错误_Php_Mysql_Html - Fatal编程技术网

Php 多表选择查询错误

Php 多表选择查询错误,php,mysql,html,Php,Mysql,Html,我在输出我的网站的邮件垃圾部分时遇到了一些问题,原因是我试图在一个select查询中从两个不同的表中获取数据,我知道这很容易做到,但由于某些原因,每当我尝试时,我总是会得到错误 Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Arken\mail.php on line 285 下面是用于选择的代码的顶部(语句中拆分的原因是为了使用分页) 这是页面

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

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Arken\mail.php on line 285
下面是用于选择的代码的顶部(语句中拆分的原因是为了使用分页)

这是页面主要部分的代码

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

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

然后就是显示记录的php/html

任何关于问题起因的想法,我都试过了

谢谢


编辑:好的,我在sql中再次尝试了它,我得到了正确的结果,应该是3条来自user_收件箱,2条来自user_发件箱,但是,由于某种原因,它复制了结果,因此对于user_收件箱,我得到了3条记录,从user_发件箱我得到了2条记录,3次,这意味着我得到了12个结果,而我应该只得到5个。这是新的问题有什么想法吗<代码>从用户收件箱、用户发件箱中选择*,其中用户收件箱、接收者用户id='4'和用户收件箱.mail'deleted='1'和用户发件箱.sender用户id='4'和用户发件箱.mail'deleted='1'

我认为您错过了一个步骤。你必须做到:

$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; }
你在做一个而不是一个

使用
交叉连接
意味着您的收件箱/发件箱记录的每个组合都会得到一个结果,这些记录与您的
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;
因为我不知道您的表结构,所以无法给出确切的查询。您可能希望包含一个标志,以便知道数据是来自inbox表还是outbox表。比如:

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

回显您的查询怎么样?好的,我从user\u收件箱、user\u发件箱(user\u inbox.receiver\u user\u id='4'和user\u inbox.mail\u deleted='1')或(user\u outbox.sender\u user\u id='4'和user\u outbox.mail\u deleted='1')中得到这个
请停止使用古老的mysql功能编写新代码。它们不再得到维护,社区已开始恢复。相反,您应该学习准备好的语句,并使用或。如果您想了解,.Hi的可能重复,谢谢您的帮助,但是我在这里做了这部分
$query=mysql\u query(“SELECT*FROM{$trash\u statement}LIMIT{$startpoint},{$LIMIT}”)然后使用mysql_fetch_assoc afterwardsOh,对不起,我没有看到。必须尝试mysql\u fetch\u数组而不是mysql\u fetch\u assoc吗?还有,在这里应该做什么?我是否应该删除我的回答,因为我猜它不太正确?好的,谢谢你的回答,但是我如何用一个联合来构造查询呢?
(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}