soporta segundo por optimizar lentas cuantas consultas mysql join multiple-tables

optimizar - cuantas consultas por segundo soporta mysql



MySQL-Seleccione el Ășltimo registro de la segunda tabla que coincida con la primera tabla (3)

Tengo dos mesas de clientes y pedidos, a continuación se muestra la estructura.

Mesa - clientes

  • carné de identidad
  • Nombre del cliente

Tabla - Pedidos

  • carné de identidad
  • Solicitar ID
  • Identificación del cliente

La tabla de clientes tiene registros de clientes y la tabla de pedidos tiene pedidos realizados por clientes,

customer_id en la tabla de pedidos está vinculado al campo id de la tabla de clientes.

Ahora un cliente puede tener cero o uno o más de un pedido, quiero obtener el último pedido realizado solo por los clientes.

cuando ejecuto la siguiente consulta una unión invisible simple, devuelve todos los pedidos del cliente

SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id

También he intentado diferentes declaraciones de JOIN pero no puedo obtener el último pedido del cliente, quiero hacerlo en una consulta SQL para todos los clientes.

Gracias de antemano por su ayuda.


En MySQL solo hay algunas formas de hacerlo funcionar ( que ahora en realidad ). La primera es ordenar su tabla como desc antes de la join :

SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c INNER JOIN orders o ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1)

El uso en tiempo real es la única forma de hacerlo, pero si necesita realizar una unión no en tiempo real, puede crear una tabla temporal o una tabla de alias ordenándola para hacer su selección, de esta manera:

CREATE TABLE tmp_your_table AS SELECT * FROM orders ORDER BY id DESC

Así que ahora puedes hacer que esta combinación funcione:

SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c INNER JOIN tmp_your_table o ON o.id = tmp_your_table.id


Prueba esta consulta

SELECT c.customer_name, max(o.order_id) FROM customers c INNER JOIN orders o ON o.customer_id = c.id GROUP BY c.customer_name

No tiene ningún campo de fecha en la tabla de pedidos, por lo que suponiendo que el último pedido será el que tiene max(order_id) .


Prueba esta consulta

SELECT c.customer_name, o.order_id FROM customers c INNER JOIN orders o ON o.customer_id = c.id ORDER BY o.id desc LIMIT 1;