加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在php中选择mysql缺少的列

发布时间:2020-12-13 16:42:22 所属栏目:PHP教程 来源:网络整理
导读:我需要得到最新的订单(从我们的管理员面板).这是我的查询: select * from order left join customer on (customer.id = order.fk_cid) where date = curdate() order by time desc limit 1; 这个输出的一切从订单和客户,我需要除了1因此这就是为什么我使用*
我需要得到最新的订单(从我们的管理员面板).这是我的查询:
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... */

这将输出:

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读