2012-06-22 5 views
1

Je veux recevoir les 5 derniers messages dans la boîte de réception. Pour obtenir les 5 derniers ID-je utiliser ceci:Requête avancée avec mysql: variables/sous-requêtes?

SELECT 
    MAX(id) 
FROM 
    samtaler 
WHERE 
    brukerid_mottaker = 1 
GROUP BY brukerid_avsender 
ORDER BY id DESC 
LIMIT 5 

Ce retour les Corrigeons d'identité dont j'ai besoin. Mais dans la même requête, je veux sélectionner des données de la même table, la ligne qui a obtenu l'ID qui est retourné de cette requête ci-dessus.

J'ai essayé certaines choses, variables et autojointure mais pas de chance:

select 
    p2.title, 
    p2.message, 
    @a:=max(p1.id) 
from 
    samtaler p1 
    join samtaler p2 
    on (@a = p2.id) 
where 
    p2.brukerid_mottaker = 1 
group by p2.brukerid_avsender 
order by p2.id DESC 
limit 5 

Pourquoi isnt ce travail?

Ce sont les données actuelles dans la base de données: http://i47.tinypic.com/2hpsjv9.png Je veux revenir dans ce cas, les lignes 13 et 4. Désolé pour le mauvais anglais.

Répondre

1

Joignez-vous à une sous-requête au lieu d'une auto-jointure simple. Une clause IN() ne fonctionnera pas car LIMIT ne peut pas être utilisé dans un IN(). Il devrait cependant fonctionner dans la sous-requête jointe:

SELECT 
    p1.title, 
    p1.message, 
    p2.id 
FROM 
    samtaler p1 
    JOIN (
    SELECT MAX(id) AS id 
    FROM 
     samtaler 
    WHERE 
     brukerid_mottaker = 1 
    GROUP BY brukerid_avsender 
    ORDER BY id DESC 
    LIMIT 5 
) p2 ON p1.id = p2.id 

Par cette méthode, il n'y a pas besoin de variables.

+0

Merci! Ça marche :) – medusa1414