[MySQL] `Online members` vanuit 1 query...

Pagina: 1
Acties:

  • mr_wizard
  • Registratie: Februari 2003
  • Laatst online: 29-04-2025
Ik ben bezig om een module te verbeteren die aangeeft wie er op dat moment online zijn op de website. Ik maak hierbij gebruik van twee tabellen, één die de bezoekers registreert en één members tabel. De tabellen zien er ongeveer zo uit:
Tbl online
session_idvarchar, not null
last_touchdatetime, not null
member_idint, null


Tbl member
idint, not null
nicknametinytext, null
inf_firsttinytext, not null


inf_first is hierbij de voornaam van de member.
Wat er dus gebeurd is, een bezoeker komt op de website en wordt geregistreerd met 'member_id' NULL, als hij inlogt wordt dit zijn eigen member_id.

Ik wil dus uit de dbase een lijst met alle mensen die de afgelopen 5 minuten nog op de website waren met 'Gast' als ze niet ingelogt hebben, hebben ze dat wel, dan wil ik de nickname, of als die niet aanwezig is de voornaam. Dit alles vanuit 1 query.... :|

Ik loop er nu al een aardige tijd mee te rotzooien, en iets wat ik nu heb is:

code:
1
2
3
4
5
6
7
8
9
SELECT DISTINCTROW
IF( member.nickname IS NOT NULL,
        IF( member.nickname='',
                member.inf_first,
                member.nickname),
        member.inf_first ) AS display, member.id
FROM online
LEFT JOIN member ON member.id = online.member_id
WHERE online.member_id IS NOT NULL


Maar met deze query krijg ik niet de niet-ingelogde users!!! 8)7
Wie heeft er ideeen?

[ Voor 4% gewijzigd door mr_wizard op 20-03-2005 15:23 ]

R&D professional


Verwijderd

code:
1
WHERE online.member_id IS NOT NULL


lijkt me wel te helpen bij het uitfilteren van de niet-ingelogde users...

  • mr_wizard
  • Registratie: Februari 2003
  • Laatst online: 29-04-2025
Yeah, I know, daar moet iets anders komen te staan, maar anders krijg ik een return van 266,666 regels :S
Maarja, wat moet daar komen?

R&D professional


Verwijderd

Gokje:

code:
1
2
3
4
5
6
SELECT
  IF (o.member_id IS NULL, 'Gast', IF(m.nickname != '', m.nickname, m.inf_first)) AS display,
  o.last_touch
FROM online o
LEFT JOIN member m ON o.member_id = m.id
WHERE online.last_touch >= DATE_ADD(NOW(), INTERVAL -5 MINUTE)


?

Verwijderd

doe gewoon 2 queries. dat boeit echt niet.

  • mr_wizard
  • Registratie: Februari 2003
  • Laatst online: 29-04-2025
OneofBorg, je hebt gelijk, de uitdrukking bij 'ON' stond verkeerd om 8)7 thanks alot man!!!
Sjaak: als je 10,000 bezoekers per dag met 6.6 pageviews AVG zit, is het misschien wel verstandig om het in 1 query te doen ;)

R&D professional


Verwijderd

mr_wizard schreef op zondag 20 maart 2005 @ 16:39:
OneofBorg, je hebt gelijk, de uitdrukking bij 'ON' stond verkeerd om 8)7 thanks alot man!!!
Euh, dat maakt niet uit hoor. Dat is verder ook niet het enige dat ik veranderd heb :). De belangrijkste (waar ik denk dat het op mis ging bij jou), is de WHERE:

code:
1
WHERE online.last_touch >= DATE_ADD(NOW(), INTERVAL -5 MINUTE)

[ Voor 23% gewijzigd door Verwijderd op 20-03-2005 17:29 ]

Pagina: 1