Выберите mysql без столбцов в php

Мне нужно получить последний заказ (из нашей панели администратора custon). здесь мой запрос:

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

в этот момент мой заказ неверен, почему?

Ответ 1

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

Также здесь вы должны прочитать следующую тему: Почему SELECT * считается вредным?