在php中选择mysql缺少的列

前端之家收集整理的这篇文章主要介绍了在php中选择mysql缺少的列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要得到最新的订单(从我们的管理员面板).这是我的查询
  1. select *
  2. from order
  3. left join customer
  4. on (customer.id = order.fk_cid)
  5. where date = curdate()
  6. order by time desc
  7. limit 1;

这个输出的一切从订单和客户,我需要除了1因此这就是为什么我使用*

这是我的桌面结构:

  1. order table:
  2. id,fk_cid,date,time
  3.  
  4. customer table:
  5. id,name,lastname,street,city,zip,country,phone,email,lastlogin

现在,在我的PHP我有:

  1. $result = MysqL_query("
  2. select *
  3. from `order`
  4. left join customer
  5. on (customer.id = order.fk_cid)
  6. where date = curdate()
  7. order by time desc
  8. limit 1");
  9. $row = MysqL_fetch_assoc($result,MysqL_ASSOC);

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

您的customers.id正在覆盖order.id,因为您使用相同的列名.
  1. select *
  2. from `order`
  3. left join customer on (customer.id = order.fk_cid)
  4. where date = curdate() order by time desc limit 1;
  5. +------+--------+------------+----------+------+-------+------
  6. | id | fk_cid | date | time | id | name | ....
  7. +------+--------+------------+----------+------+-------+------
  8. | 1 | 2 | 2011-11-30 | 07:01:23 | 2 | asasd | ....
  9. +------+--------+------------+----------+------+-------+------
  10. 1 row in set (0.03 sec)

正如你在这个例子中看到的,你有两个id,所以PHP在使用MysqL_fetch_assoc检索数据时会覆盖第二个id,因为它在数组中是相同的.要解决这个问题,您必须在查询中指定列:

  1. select `order`.id AS order_id,customer.id AS customer_id,customer.name /* etc... */

这将输出

另外,我建议您的表和字段使用不同的名称.订单,日期,时间,因为它们是保留字(以防你忘记使用`).

  1. Array
  2. (
  3. [order_id] => 1
  4. [customer_id] => 2
  5. // etc...
  6. )

这里还有一个你应该看的主题Why is SELECT * considered harmful?

猜你在找的PHP相关文章