2011-12-05 20 views
10

necesito obtener el último pedido (de nuestro panel de administración de custon). aquí está mi consulta:seleccione las columnas que faltan de mysql en php

select * 
from order 
    left join customer 
    on (customer.id = order.fk_cid) 
where date = curdate() 
order by time desc 
limit 1; 

esta salida todo de pedidos y clientes que necesito, excepto 1, por tanto, es por eso que uso el *

aquí es mi estructura de la tabla:

order table: 
id, fk_cid, date, time 

customer table: 
id, name, lastname, street, city, zip, country, phone, email, lastlogin 

ahora, en mi php tengo:

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

en este momento mi pedido no es correcto, ¿por qué?

Respuesta

15

Su customers.id es sobreescribiendo el order.id porque está utilizando el mismo nombre de columna.

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) 

Como se puede ver en este ejemplo, tiene dos id, por lo que cuando PHP recuperar los datos utilizando mysql_fetch_assoc sobrescribe el segundo id porque es la misma clave en la matriz. Para solucionar este problema, tendrá que especificar las columnas de la consulta:

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

Esta es la salida:

Además, se recomienda utilizar el nombre diferente para las tablas y campos. order, date, time ya que son palabras reservadas (en caso de que olvide utilizar el `).

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

También aquí hay un tema que debe leer: Why is SELECT * considered harmful?

+0

todas mis consultas utilizan * Select, que significa que tenga que cambiar todos ellos? – Adam

+0

si quiere datos precisos, sí, especialmente si el nombre de todas sus columnas es el mismo de tablas a tablas. –

+0

ouch, pero sí veo por qué tengo algunos errores ahora, gracias por su respuesta – Adam

Cuestiones relacionadas