2017-08-22 203 views
0

我有兩個表customercustomer_transaction。兩者都有共同的customer_id,但customer_transaction也有一個字段描述,我想返回我的結果,基於共同的customer_id。 結果正常工作,但省略了所有customer_idcustomer_transaction的所有記錄的customer_id。描述按照圖像。我相信我在這裏錯過了一些小東西。PHP MYSQL SELECT和LEFT JOIN - 沒有返回所有結果

enter image description here

相關的代碼的一部分。我似乎認爲問題在於SELECT語句。

$sql = "SELECT * FROM customer LEFT OUTER JOIN customer_transaction ON customer. customer_id =customer_transaction. customer_id WHERE customer.customer_group_id = $input"; 

$sth = $pdo->prepare($sql); 
$sth->bindParam(':start',$start,PDO::PARAM_INT); 
$sth->bindParam(':length',$length,PDO::PARAM_INT); 
$sth->bindParam(':query',$query,PDO::PARAM_STR); 
$sth->execute(); 

foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) { 
    $phpvar = "$row[description] "; //creat variable for descriptio so as to limit the length using substr 
    echo '<tr>'; 
    echo '<td>'. $row['customer_id'] . '</td>'; 
    echo '<td>'. $row['company_name'] . '</td>'; 
    echo '<td>'. $row['firstname'] ." ". $row['lastname'] .'</td>'; 
    echo '<td>'. $row['email'] . '</td>'; 
    echo '<td>'. $row['telephone'] . '</td>'; 
    echo '<td>'. $row['customer_id'] . '</td>'; 
    echo '<td>'. $row['customer_group_id'] . '</td>'; 
    echo '<td>'. substr($phpvar,0) . '</td>'; //Limit the length of the transactions here 
    echo '<td width=250>'; 
+0

無論您如何解決問題,答案都不是這樣。 – Strawberry

回答

1

問題是你有兩次customer_id。然而,該陣列只能使用一個名稱爲customer_id的密鑰。只需將字段名稱作爲關鍵字,即可將值複製到數組字段中。第二次出現的值,即customer_transaction表中的值將覆蓋客戶表中的值,並且由於不是每個客戶都有一個事務,您將在那裏獲得空字段。

最好的解決方案是更準確地在你需要的領域。無論如何,只需取出所需的字段而不是使用*即可。

因此,您的查詢可能如下所示。稍微詳細一些,但可以靈活地使用別名,計算值並且不需要返回不使用的字段的開銷。

SELECT 
    c.customer_id, 
    c.company_name, 
    c.firstname, 
    c.email, 
    c.telephone, 

    /* You could provide the field with an alias */ 
    t.customer_id as transaction_customer_id, 

    /* Or use its value to return a more sensible value */ 
    CASE WHEN t.customer_id IS NULL 
     THEN 'N' 
     ELSE 'Y' END AS has_transaction, 
    t.customer_group_id 
FROM customer 
LEFT OUTER JOIN customer_transaction ON customer. customer_id = customer_transaction.customer_id 
WHERE customer.customer_group_id = $input 
+0

好,謝謝,但我不能刪除我的,因爲接受 – Sand

+0

[我知道那種感覺](https://stackoverflow.com/questions/6113262/how-to-determine-if-pdo-is-enabled-在-PHP/6113296#6113296)。 ;-) – GolezTrol

+0

哦,你犯了同樣的錯誤,那麼現在是我的時間了:P。 – Sand