MySQL Join,其中匹配的列包含不同的值

时间:2019-01-04 15:02:43

标签: php mysql select mysqli subquery

下面的Select过去常与带有for循环的Mysql_Select配合使用,但是由于更新为mysqli_connect并使用while循环,我遇到了麻烦。

$query = 
    "SELECT * 
    FROM 
        jobs
        LEFT JOIN invoices ON jobs.jobID=invoices.jobID
    WHERE jobs.customerID = '$selectedcustID' 
    ORDER BY date_auto DESC";

$result = mysqli_query($connection, $query) or die(mysqli_error());

if(mysqli_num_rows($result) > 0) {          
    while($row = mysqli_fetch_assoc($result)) {
        $selectedjobID = $row["jobID"];
        $date = $row["date_auto"];
        $formatdate =  date("d/m/Y", $date);
        $status = $row["status"];
        $notes = $row["notes"];
        $invoiceStatus = $row["invoiceStatus"];
        $invoicePaid = $row["paid"];
        $invoiceNumber = $row["invoiceID"];
        $formatinvoiceNumber = sprintf("%05d", $invoiceNumber);

公用参数是jobIDjobs表中的invoices列,但是由于发票直到被提现才存在,因此jobID在我的作业的php输出列表现在为空。我认为原因是它使用的是jobID的发票版本(即NULL),而不是作业的版本。

我尝试了各种方法来解决此问题,但是却绕圈而行。我认为这是从作业中选择SELECT *和SELECT jobID AS的一种情况,但我不确定语法是否正确。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

由于发票直到被提出才存在,所以我的php输出作业列表中的jobID显示为空白

不要使用SELECT *jobID的两端都有一个LEFT JOIN字段,最后您会选择错误的字段(即invoices.jobID ,即尚未开具发票的NULL

您要明确选择所需的字段,例如:

SELECT  
    jobs.jobID,
    ...
FROM 
    jobs 
    LEFT JOIN invoices ON jobs.jobID = invoices.jobID
 WHERE jobs.customerID = '$selectedcustID'
ORDER BY date_auto DESC