我需要得到最新的订单(从我们的管理员面板).这是我的查询:
- 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我有:
在这一点上我的订单是不正确的,为什么?
您的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... */
这将输出:
另外,我建议您的表和字段使用不同的名称.订单,日期,时间,因为它们是保留字(以防你忘记使用`).
- Array
- (
- [order_id] => 1
- [customer_id] => 2
- // etc...
- )
这里还有一个你应该看的主题:Why is SELECT * considered harmful?