SQL,PHP,按其他表的内容对表的内容进行排序

时间:2017-02-02 07:48:46

标签: php mysql sql

我对某些sql有点问题。我必须在同一个mysql数据库中的表,称为total和dismissed。两者都有一个名为person_id的列。 我试图从总数中删除所有记录,减去被解雇的记录。

因此,如果表格总数的值为1,2,3,4,5,6,7

并被驳回:3,4,7

我只希望从表中显示1,2,5,6

我的sql目前看起来像这样:

$sql = "SELECT * FROM total WHERE NOT EXISTS (SELECT 1 FROM dismissed WHERE total.person_id = dismissed.person_id)";

其余代码是:

$servername = "servername";
$username = "username";
$password = "password";
$dbname = "dbname";


$conn=mysqli_connect($servername, $username, $password, $dbname);

if (mysqli_connect_errno()) {
    echo 'Fail:' . mysqli_connect_error();
}

$sql = "SELECT * FROM total WHERE NOT EXISTS (SELECT 1 FROM dismissed WHERE total.person_id =  dismissed.person_id)";

//$sql = "SELECT * FROM total";
$result=mysqli_query($conn,$sql);

$row=mysqli_fetch_assoc($result);          //First error message

while($feed_varer=mysqli_fetch_assoc($result)) {                 //Second error message

//some code

}

在执行类似$sql = "SELECT * FROM total";之类的操作时,我没有遇到连接数据库的问题,其余的代码也适用于这种情况。

我得到的错误信息是: 警告:mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in url-to-page.php (网址缩短)错误消息给出两次,代码中标记了行。 希望你能帮帮我。

试图像这样测试查询:(感谢Abdus Sattar Bhuiyan)

if ($result = $conn->query("SELECT * FROM total ORDER BY person_id")) {
    $row_cnt = $result->num_rows;
    printf($row_cnt);
    $result->close();
}

结果显示正确的行数。

2 个答案:

答案 0 :(得分:3)

通常在mysqli_query未正常运行时会发生这种情况。检查$ query是否正确执行或是否包含任何内容。问题可能在于连接,也可能与查询有关,也可能与表有关。确保$ query包含结果。

试试这个

if (!$result) {
        echo 'MySQL Error: ' . mysqli_error($result);
        exit;
    }

让我们知道什么是mysql错误

答案 1 :(得分:0)

好的,我看到的第一个问题是SQL命令的第二部分 SELECT 1 FROM dismissed WHERE total.person_id = dismissed.person_id
你为什么选择1?

其次,我会使用NOT IN而不是NOT EXIST,因为这更有效(link)

第三,WHERE函数应该包含一列