php:找不到该列,但它在数据库中

时间:2018-12-18 08:08:46

标签: php

我无法弄清楚我的代码出了什么问题。该代码用于从数据库的2个大表中取出特定的列。但是在使用完查询后,我们还需要求和1个特定值。

问题出在这部分

  $query = substr($query, 4);
    $sql2 = "SELECT SUM(Forspris) FROM orderrad
    JOIN orderhuvud on orderhuvud.OrderKund = orderrad.Orderdatum
     where ". $query;
        echo $sql2;
        $result = mysqli_query($conn, $sql2) or die(mysqli_error($conn));
        while($row = mysqli_fetch_array($result)){
            echo print_r($row);     }

这是我得到的错误:

  

从Orderrad中选择SUM(Forspris)在orderhuvud上加入orderhuvud.OrderKund = orderrad.Orderdatum其中OrderKund ='15'并且'2015-04-16'和'2015-05-06'之间的Orderdatum未知列'orderrad.Orderdatum在“ on子句”中

但是它在代码中的位置更长了,它可以在查询中找到列orderdatum

<!doctype html>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link rel="stylesheet" href="css.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">

    </head>
    <body>

    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "garp";

    $conn = new mysqli ($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    /*    $query = $_GET['query']; */
        $orderkund = $_GET['Orderkundinput']; 
        $artikel = $_GET['Artikelinput']; 
        $startDate =$_GET['startDate']; 
        $endDate =$_GET['endDate'] ;

        $MCkys = "orderdatum";

        $min_length = 2;
        $artikelQuery="";
        $orderkundQuery="";
        if(strlen($artikel) >= $min_length){ 
            $artikel = htmlspecialchars($artikel); 

            $artikel = mysqli_real_escape_string($conn, $artikel);
            $artikelQuery = " AND Artikelnr = '$artikel'";
        }
        if (strlen($orderkund) >= $min_length){ 
            $orderkund = htmlspecialchars($orderkund); 

            $orderkund = mysqli_real_escape_string($conn, $orderkund);
            $orderkundQuery = " AND OrderKund = '$orderkund'";
        }

        if (strlen($startDate) >= $min_length){ 
            $startDate = htmlspecialchars($startDate); 

            $startDate = mysqli_real_escape_string($conn, $startDate);
            $startDateQuery = " AND Orderdatum between '$startDate' ";
        }

        if (strlen($endDate) >= $min_length){ 
            $endDate = htmlspecialchars($endDate); 

            $endDate = mysqli_real_escape_string($conn, $endDate);
            $endDateQuery = "AND '$endDate'";
        }

        $query = $artikelQuery.$orderkundQuery.$startDateQuery.$endDateQuery;
        if(strlen($query) >= $min_length){ 
        $sql = "SELECT OrderHuvud.Ordernummer ,OrderHuvud.OrderserieIK ,OrderKund ,Fakturakund ,Orderdatum ,Erreferens ,Levereratvarde ,Radnummer ,Artikelnr ,Benamning ,Leveranstid ,Ursprungligtantal ,Levereratantal ,Forspris ,Bruttopris ,Varukostnad FROM garp.OrderHuvud left join garp.OrderRad on OrderHuvud.Ordernummer = OrderRad.Ordernummer where  OrderHuvud.OrderserieIK = 'K'" .$query;
        $raw_results = $conn->query ($sql);
            $row_cnt = false === $raw_results ? 0 : $raw_results->num_rows;
            echo " <p class='rows'> Numbers of rows loaded: $row_cnt </p>";
            if($row_cnt > 0){
       while($raw_result = mysqli_fetch_array($raw_results)){
           echo "<table class='table'><thead class='thead-light'><tr><th class='col'>".'Ordernummer'."</th><th class='col'>".'OrderserieIK'."</th><th class='col'>".'Orderkund'."</th><th class='col'>".'fakturakund'."</th><th class='col'>".'orderdatum'."</th><th class='col'>".'erreferens'."</th><th class='col'>".'leveratvarde'."</th><th class='col'>".'radnummer'."</th><th class='col'>".'artikelnr'."</th><th class='col'>".'benamning'."</th><th class='col'>".'leveranstid'."</th><th class='col'>".'Ursprungligtantal'."</th><th class='col'>".'Levereratantal'."</th><th class='col'>".'forspris'."</th><th class='col'>".'bruttopris'."</th><th class='col'>".'varukostnad'."</th></tr></thead>";
           echo "<tbody><tr><td>".$raw_result['Ordernummer']."</td><td>".$raw_result['OrderserieIK']."</td><td>".$raw_result['OrderKund']."</td><td>".$raw_result['Fakturakund']."</td><td>".$raw_result['Orderdatum']."</td><td>".$raw_result['Erreferens']."</td><td>".$raw_result['Levereratvarde']."</td><td>".$raw_result['Radnummer']."</td><td>".$raw_result['Artikelnr']."</td><td>".$raw_result['Benamning']."</td><td>".$raw_result['Leveranstid']."</td><td>".$raw_result['Ursprungligtantal']."</td><td>".$raw_result['Levereratantal']."</td><td>".$raw_result['Forspris']."</td><td>".$raw_result['Bruttopris']."</td><td>".$raw_result['Varukostnad']."</td></tr></tbody></table>";

       }
            }

            else{
       echo "No return";
            }
        }
        else{
            echo "Minimum length is ".$min_length;
        }
    $query = substr($query, 4);
    $sql2 = "SELECT SUM(Forspris) FROM orderrad
    JOIN orderhuvud on orderhuvud.OrderKund = orderrad.Orderdatum
     where ". $query;
        echo $sql2;
        $result = mysqli_query($conn, $sql2) or die(mysqli_error($conn));
        while($row = mysqli_fetch_array($result)){
            echo print_r($row);     }
        ?>

enter image description here

1 个答案:

答案 0 :(得分:0)

SELECT SUM(Forspris) FROM orderrad where orderhuvud.OrderKund

您的表是orderrad,在您尝试使用另一个表(orderhuvud)的地方,但是您需要先加入才能使用它,或者从中选择。

SELECT SUM(Forspris) FROM orderrad 
JOIN orderhuvud on orderhuvud.your_column_to_match = orderrad.your_column_to_match
where orderhuvud.OrderKund = '15' AND orderhuvud.Orderdatum between '2015-04-16' AND '2015-05-06'

以上代码将加入您的表。为了加入他们,您需要找到两个表共享的列,并且这两个列对他们来说是相同的,因此您可以在这列上加入他们。

这是一个非常明确的示例,请不要讨厌w3school,对于内部联接来说,这个示例非常明确。了解更多here!!!