php - 在 php 中选择 mysql 缺少的列

标签 php mysql sql

我需要获取最新订单(来 self 们的客户管理面板)。这是我的查询:

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

还有一个您应该阅读的主题:Why is SELECT * considered harmful?

关于php - 在 php 中选择 mysql 缺少的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379708/

相关文章:

php - MySQL插入语句外键自动添加pk

php - 如何在Wordpress中添加Google的utm_source变量?

php - xml 到 phpmyadmin 创建了太多行

mysql - 如何按时间对事件表进行排序(具有不同的时区)?

mysql - 如何在此查询上进行内部联接

连接 3 个表的 MySQL 查询给出了错误的结果

php - 产品、变体和库存-什么是设计数据库的最佳方式

php - 如何重定向 301 错误网址?

mysql - 无法在mamp环境中使用root@localhost连接到mysql数据库

sql - 如何确定 SQL Server 2012 中是否存在序列?