簡體   English   中英

選擇查詢聯接兩個表的PHP

[英]Select query joining two tables PHP

我將一個腳本放在一起,該腳本將打印“ sales_list ”表中的所有行,但僅打印那些與已登錄用戶匹配的“ users_sales_guild_id ”行。 這很好。

我要執行的操作是打印所有行,但從“ accessories_orders”表中檢索匹配的sales_id ,並將“ accessories_orders_total”和出廠狀態與查詢一起放入,因此如果以下內容在瀏覽器中看起來像這樣:登錄的人的“ user_sales_guild_id”值為“ 1234”

+--------+---------------+-------------------+----------+
| Model  | Customer Name | Accessories Total | Status   | 
+--------+---------------+-------------------+----------+
| Nissan | Malcom Smith  |                   | Add      |
| Ford   | Jane Smith    | 200.00            | Pending  | 
+------------------------+-------------------+----------+

因此,如果“ accessories_orders”表中有匹配的行,則它將打印“ shipped”“ accessories_orders_total”數據。 如果沒有與此匹配的行,那么它將顯示一個“ Add”鏈接,該鏈接指向add_accessories_sales.php。

我收到一條錯誤消息“未定義的索引:sales_model”,並且在第一個查詢中還有幾乎所有其他內容,有人可以指出我要去哪里了嗎?

“ sales_list”表

+--------------------------------------------------------------------------------------------------------------------------+
| sales_list                                                                                                               |
+------+--------------------------+--------------------------+------------------------+-------------+----------------------+
| sales_id | users_sales_guild_id | sales_customer_firstname | sales_customer_surname | sales_model |  sales_entry_date    |
+----------+----------------------+--------------------------+------------------------+-------------+----------------------+
| 1        | 1234                 | Jane                     | Smith                  | Ford        | 2013-12-02 12:00:00  |
| 2        | 5678                 | John                     | Chan                   | Mazda       | 2013-12-03 12:00:00  |
| 3        | 5678                 | Kevin                    | Chan                   | Fiat        | 2013-12-04 12:00:00  |
| 4        | 1234                 | Malcom                   | Smith                  | Nissan      | 2013-12-05 12:00:00  |
+----------+----------------------+--------------------------+------------------------+-------------+----------------------+

“ accessories_orders”表

+-------------------------------------------------------------------------------------------------------------------------+
| accessories_orders                                                                                                      |
+-----------------------+----------------------+----------+--------------------------+-------------------------+----------+
| accessories_orders_id | users_sales_guild_id | sales_id | accessories_orders_total | accessories_orders_date | shipped  |  
+-----------------------+----------------------+----------+--------------------------+-------------------------+----------+
| 1                     | 1234                 | 1        | 200.00                   | 2013-12-02 12:00:00     | Pending  |
| 2                     | 5678                 | 2        | 350.00                   | 2013-12-03 12:00:00     | Pending  | 
| 3                     | 5678                 | 3        | 100.00                   | 2013-12-03 12:00:00     | Pending  |
+-----------------------+----------------------+----------+--------------------------+-------------------------+----------+

編輯和更新的代碼

<?php
require_once ('database.php'); // Connect to the database.

$query = " SELECT sl.sales_model, sl.sales_customer_firstname, sl.sales_customer_surname, ao.accessories_orders_total, ao.shipped, 
       COALESCE(ao.shipped)
       FROM sales_list sl
       LEFT JOIN accessories_orders ao ON(ao.sales_id = sl.sales_id)
       WHERE sl.users_sales_guild_id ='".$_SESSION['users_sales_guild_id']."' 
       ORDER BY 
     ".$order_by." LIMIT ".$start.", ".$display;

$result = @mysql_query ($query); // Run the query.

echo '<table width="610" cellspacing="1" cellpadding="5" style="font-size:11px;">
<tr>
<td align="center">Model </td>
<td align="center">Customer Name</td>
<td align="center">Accessories Total</td>
<td align="center">Status</td></tr>';

$bg = '#ffffff'; // Set the background color.
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$status = $row['shipped'];

$bg = ($bg=='#e1e3e6' ? '#cdcdcf' : '#e1e3e6'); // Switch the background color.   
echo '<tr bgcolor="' . $bg . '">';
echo  '<td align="center">' . $row['sl.sales_model'] . '</td>';
echo  '<td align="center">' . $row['sl.sales_customer_firstname'] . ' ' . $row['sl.sales_customer_surname'] . '</td>';
echo  '<td align="center">$' . $row['acc.accessories_orders_total'] . '</td>';

$str = '<td align="center">';
if($status == 'Pending') {
 $str .=' Pending</td></tr>';
}
else {
 $str .='<strong><a href="add_accessories_sales.php?sid=' . $row['sl.sales_id'] . '">Add</a></strong></td></tr>'; 
}   
echo $str;
}

echo '</table>';
mysql_free_result ($result); // Free up the resources.
mysql_close();  //Close the database connection.
?>

您的查詢需要更像這樣:

SELECT sl.sales_model, sl.sales_customer_firstname, sl.sales_customer_surname, ao.accessories_orders_total, COALESCE(ao.shipped, 'Add') status
FROM sales_list sl
LEFT JOIN accessories_orders ao ON(ao.sales_id = sl.sales_id)
WHERE sl.users_sales_guild_id = 1234;

LEFT JOIN是這里的關鍵。 它允許行從數據返回sales_list即使在沒有相應的條目accessories_orders

有關工作示例,請參見此提琴: http : //sqlfiddle.com/#!2/f7d3d/4

正如其他人已經指出的那樣,您應該使用mysqli函數集,而不是mysql函數集。

首先,您不應該包括表名。 例:

//wrong
echo  '<td align="center">' . $row['sl.sales_model'] . '</td>';

//correct
echo  '<td align="center">' . $row['sales_model'] . '</td>';

其次,除非使用的是過時的PHP版本,否則不應使用mysql 切換到mysqliPDO

第三,您沒有錯誤處理可以告訴您查詢是否成功。 實際上,您與錯誤處理相反,因為您試圖使用@運算符來抑制錯誤。 相反,您應該執行以下操作:

//assuming you switch to mysqli
mysqli_query("SELECT acc.accessories_orders_id, acc.users_id, acc.sales_id, 
      acc.accessories_orders_total, acc.accessories_orders_date, acc.shipped,
      acc.timestamp, sl.sales_id
      FROM accessories_orders AS acc, sales_list AS sl
      WHERE acc.sales_id = sl.sales_id");
if(mysqli_error()) {
    throw new Exception(mysqli_error(), mysqli_errno());
}

如果這樣做,您的mysql錯誤將與php錯誤記錄在同一位置。 然后,您將能夠判斷出您的問題是否來自格式錯誤的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM