首页 > 解决方案 > MySQL Join,其中匹配的列包含不同的值

问题描述

下面的 Select 曾经使用 Mysql_Select 和 for 循环完美地工作,但是自从更新到 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);

通用参数是和表jobID中的列,但由于发票在提出之前不存在,因此我的 php 输出作业列表中的显示现在为空白。我认为原因是它使用的是 jobID (being ) 的发票版本,而不是作业版本。jobsinvoicesjobIDNULL

我已经尝试了各种解决这个问题的方法,但我正在绕圈子。我认为这将是说 SELECT * from jobs 和 SELECT jobID AS 但我不确定正确的语法。

任何帮助将不胜感激。

标签: phpmysqlselectmysqlisubquery

解决方案


由于发票在提出之前不存在,因此我的 php 输出作业列表中的 jobID 显示现在为空白

不要使用SELECT *:您在 的jobID两端都有一个字段LEFT JOIN,并且您最终选择了错误的字段(即invoices.jobIDNULL发票尚未提出时)。

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

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

推荐阅读