簡體   English   中英

在php中選擇mysql缺少的列

[英]select mysql missing columns in php

我需要獲得最新訂單(來自我們的客戶管理面板)。 這是我的查詢:

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

這將輸出:

另外,我建議為表和字段使用不同的名稱。 orderdatetime因為它們是保留字(如果您忘記使用` )。

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

這里還有一個你應該閱讀的主題: 為什么SELECT *被認為是有害的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM