php - 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 ) 的发票版本,而不是作业版本。jobs
invoices
jobID
NULL
我已经尝试了各种解决这个问题的方法,但我正在绕圈子。我认为这将是说 SELECT * from jobs 和 SELECT jobID AS 但我不确定正确的语法。
任何帮助将不胜感激。
解决方案
由于发票在提出之前不存在,因此我的 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
推荐阅读
- html - 如何以角度管理组件之间的空间
- wordpress - 如何在可变产品woocommerce中添加自定义价格
- mysql - MYSQL 不是 OR 是 NULL
- java - 如何恢复 Spring Boot 1.5 中的默认异常映射?
- excel - 需要过滤数据中更改单元格的单元格地址
- visual-studio - Devenv 命令和密码
- publish - github不会为我发布,你能窥探我做错了什么吗
- xml - 验证缺少的标签 xQuery
- r - 无法让 kmeans 工作?
- node.js - Google Cloud Node js 部署问题:(gcloud.app.deploy)错误响应:[9]