155 votes

MySQL JOIN la ligne la plus récente seulement ?

J'ai une table customer qui stocke l'identifiant du client, l'email et la référence. Il y a une table supplémentaire customer_data qui stocke un historique des modifications apportées au client, c'est-à-dire que lorsqu'une modification est apportée, une nouvelle ligne est insérée.

Afin d'afficher les informations sur les clients dans un tableau, les deux tableaux doivent être reliés, mais seule la ligne la plus récente de customer_data doit être reliée au tableau customer.

La situation est un peu plus compliquée, car la requête est paginée et comporte donc une limite et un décalage.

Comment puis-je faire cela avec MySQL ? Je pense que je veux mettre un DISTINCT quelque part...

L'interrogation actuelle est la suivante

SELECT *, CONCAT(title,' ',forename,' ',surname) AS name
FROM customer c
INNER JOIN customer_data d on c.customer_id=d.customer_id
WHERE name LIKE '%Smith%' LIMIT 10, 20

En outre, ai-je raison de penser que je peux utiliser CONCAT avec LIKE de cette manière ?

(Je suis conscient que INNER JOIN n'est peut-être pas le bon type de JOIN à utiliser. En fait, je n'ai aucune idée de la différence entre les différents JOIN. Je vais me pencher sur la question maintenant).

2voto

JapanPro Points 6278
SELECT CONCAT(title,' ',forename,' ',surname) AS name * FROM customer c 
INNER JOIN customer_data d on c.id=d.customer_id WHERE name LIKE '%Smith%' 

Je pense que vous devez changer c.customer_id en c.id

sinon, mettre à jour la structure du tableau

1voto

Ajay Kumar Points 29

Vous pouvez également faire ceci

SELECT    CONCAT(title, ' ', forename, ' ', surname) AS name
FROM      customer c
LEFT JOIN  (
              SELECT * FROM  customer_data ORDER BY id DESC
          ) customer_data ON (customer_data.customer_id = c.customer_id)
GROUP BY  c.customer_id          
WHERE     CONCAT(title, ' ', forename, ' ', surname) LIKE '%Smith%' 
LIMIT     10, 20;

0voto

Burçin Yazıcı Points 410

C'est une bonne idée que d'enregistrer des données réelles dans " données_client table ". Avec ces données, vous pouvez sélectionner toutes les données de la table "customer_data" comme vous le souhaitez.

-1voto

StudioX Points 96

La solution la plus simple pour joindre à gauche la ligne la plus récente ou la moins récente est d'utiliser select over ON phrase.

SELECT *
FROM A
LEFT JOIN B
ON A.id = (SELECT MAX(id) FROM B WHERE id = A.id)

Où A.id est la clé primaire auto-incrémentale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X