2011-12-05 62 views
10

我需要获取最新订单(来自我们的custon管理面板)。这里是我的查询:在php中选择mysql缺少的列

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); 

在这一点上我的命令是不正确的,为什么?

回答

15

您的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... */ 

这将输出:

另外,我建议为你的表和字段使用不同的名称。 orderdate,time,因为它们是保留字(如果您忘记使用`)。

Array 
(
    [order_id] => 1 
    [customer_id] => 2 
    // etc... 
) 

而且这里有一个主题,你应该阅读:Why is SELECT * considered harmful?

+0

我所有的查询使用SELECT *,则意味着我必须改变所有的人? – Adam

+0

如果你想要准确的数据是的,特别是如果你所有的列的名称是从表到表相同。 –

+0

哎哟,但是我明白了为什么我现在得到一些错误,谢谢你的回答 – Adam