[英]select mysql missing columns in php
我需要獲得最新訂單(來自我們的客戶管理面板)。 這是我的查詢:
select *
from order
left join customer
on (customer.id = order.fk_cid)
where date = curdate()
order by time desc
limit 1;
這輸出了我需要的訂單和客戶的一切,除了1因此這就是為什么我使用*
這是我的表格結構:
order table:
id, fk_cid, date, time
customer table:
id, name, lastname, street, city, zip, country, phone, email, lastlogin
現在,在我的PHP我有:
$result = mysql_query("
select *
from `order`
left join customer
on (customer.id = order.fk_cid)
where date = curdate()
order by time desc
limit 1");
$row = mysql_fetch_assoc($result, MYSQL_ASSOC);
此時我的訂單不正確,為什么?
您的customers.id
正在覆蓋 order.id
因為您使用的是相同的列名。
select *
from `order`
left join customer on (customer.id = order.fk_cid)
where date = curdate() order by time desc limit 1;
+------+--------+------------+----------+------+-------+------
| id | fk_cid | date | time | id | name | ....
+------+--------+------------+----------+------+-------+------
| 1 | 2 | 2011-11-30 | 07:01:23 | 2 | asasd | ....
+------+--------+------------+----------+------+-------+------
1 row in set (0.03 sec)
正如您在本示例中所看到的,您有兩個id
,因此PHP在使用mysql_fetch_assoc
檢索數據時會覆蓋第二個id
因為它與數組中的鍵相同 。 要解決此問題,您必須在查詢中指定列:
select `order`.id AS order_id, customer.id AS customer_id, customer.name /* etc... */
這將輸出:
另外,我建議為表和字段使用不同的名稱。 order
, date
, time
因為它們是保留字(如果您忘記使用` )。
Array
(
[order_id] => 1
[customer_id] => 2
// etc...
)
這里還有一個你應該閱讀的主題: 為什么SELECT *被認為是有害的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.