Avoir des problème avec MySQL requête de JOINTURE INTERNE ayant sous-requête dans il
J'ai deux tables, la catégorie et les images. Ici, De La Catégorie.ID == Images.Catégorie
Catégorie
-----------------------
| ID | parent | name |
-----------------------
| 1 | 1 | foo |
| 2 | 1 | bar |
| 3 | 2 | lorem |
-----------------------
Images
--------------------------------------
| ID | category | url |
--------------------------------------
| 1 | 1 | foo.jpg |
| 2 | 2 | bar.jpg |
| 3 | 1 | foo2.jpg |
--------------------------------------
J'ai essayé de Requête MySQL
SELECT *
FROM `category`
INNER JOIN
(SELECT MAX(ID) , url, category FROM `images` GROUP BY `category`)
AS a ON category.ID = a.category
WHERE `parent` = '1'
Qui Résultats dans
-------------------------------------------
| ID | parent | name | url | max(ID) |
-------------------------------------------
| 1 | 1 | foo | foo.jpg | 3 |
| 2 | 1 | bar | bar.jpg | 2 |
-------------------------------------------
Le Problème est
Je veux url de la dernière ajouté la ligne dans ici, mais comme dans la première ligne, au Lieu de l'adresse url = foo2.jpg et max(ID) = 3, il en résulte foo.jpg. Je ne vois pas le problème dans la requête.
- Je utiliser max(ID) pour obtenir la dernière ligne, ce qui donne à corriger dernière ligne pour max(ID), mais pas l'url appropriée de la colonne.
Vous devez vous connecter pour publier un commentaire.
Essayez plutôt ceci:
SQL Violon Démo
Le problème est que, vous avez été
GROUP BY category
à l'intérieur de la sous-requête et sélectionnezMAX(ID) , url, category
qui n'ont pas été inclus dans une fonction d'agrégation, ni dans leGROUP BY
clause de MySQL prend une valeur arbitraire de ces colonnes. C'est pourquoi vous avez été l'obtention de résultats cohérents.Pour résoudre ce problème,
JOIN
les deux tablescategory
etimages
normalement, puis ajouter une jointure entre la tableimages
et une sous-requête qui calcule laMAX(id)
avecGROUP BY category
pour la même tableimages
. Alors rejoignez cette sous-requête avec la tableimages
sur la condition de jointure que le maxid
= à l'origineid
.Cela vous donnera uniquement ces détails de l'image pour la dernière
id
.Plus Courte,
Je pense que cette requête va travailler pour vous..testé avec sql violon...avec ce lien.
http://sqlfiddle.com/#!2/5fe63/36
laissez-moi savoir si résolu