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;