MySQL Join, где совпадающие столбцы содержат разные значения - PullRequest
0 голосов
/ 04 января 2019

Нижеприведенный 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 в таблицах jobs и invoices, но, поскольку счет-фактура не будет существовать до тех пор, пока счет не будет поднят, отображение jobID в моем списке выходных заданий php теперь пустое , Я думаю, причина в том, что он использует версию jobID для счетов-фактур (будучи NULL), а не версию для заданий.

Я пробовал все возможные способы обхода этого, но бегаю кругами. Я думаю, что это будет случай сказать SELECT * из заданий и SELECT jobID AS, но я не уверен в правильном синтаксисе.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 04 января 2019

Поскольку счет-фактура не будет существовать до тех пор, пока он не будет выставлен, отображение jobID в моем списке выходных данных php теперь пусто

Не используйте 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
...