Php helpers,

Ik heb een activiteiten log gemaakt waar alle acties die een gebruiker uitvoert in komen te staan. Ik haal dit op uit de database met een LIMIT en groepeer deze acties per gebruiker. Nu wil ik eigenlijk de laatste x aantal gebruikers weergeven met alle acties die

In dit voorbeeld 3 users, maar met een onbekend aantal uitgevoerde acties:

user 1
	avatar aangepast
	geschiedenis aangepast
	profiel aangepast
user 2
	avatar aangepast
user 3
	profiel aangepast
	geschiedenis aangepast


Hoe kan ik in mijn query limiteren tot een bepaald aantal groepen acties? Het aantal weer te geven users is dus lijdend voor het geen wat ik wil weergeven.

Ik hoop dat mijn vraagstelling duidelijk is.

Ben benieuwd!
Dat soort dingen kan met een select van een select.

De clue van de zaak is de volgende:
Een SELECT zoekt naar records in een tabel.
Maar die SELECT zal op zijn buurt als resultaat een tijdelijke tabel genereren.
Die tijdelijke tabel kan je dan weer gebruiken om een andere select op uit te voeren.

Bekijk eens of dit je zinnig lijkt.

SELECT drie_man.user_id AS user_id, drie_man.username AS username, acties.actie as actie
FROM (
  SELECT user_id, username
  FROM users
  ORDER BY user_id DESC
  LIMIT 3
) AS drie_man
INNER JOIN acties ON drie_man.user_id = acties.user_id
ORDER BY drie_man.user_id, acties.actie


Dus eerst maak je (intern) een tabel drie_man.
Dan voer je de JOIN niet uit op de volledige user tabel, maar op die uitgedunde tabel.
Je kan de user query met de LIMIT als subquery achter de FROM plaatsen:

SELECT
	u.user_id,
	u.user_name,
	a.action_name
FROM (
	SELECT
		user_id,
		user_name
	FROM
		users
	[WHERE user_status = 1]
	ORDER BY user_name
	LIMIT 0,3
	) AS u
INNER JOIN
	user_actions AS a
	ON u.user_id = a.user_id
ORDER BY
	u.user_name;
-- de laatste ORDER BY is een PostGres tic



[size=xsmall]Toevoeging op 11/09/2012 14:04:11:[/size]

Potverdikkie, weer te laat

Reageren