Toon posts:

[mysql] Query afmaken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Zit beetje vast met met query, hij werkt helemaal goed, maar wil er nog 1 onderdeel aan toevoegen. Hij moet namelijk kijken of de betreffende gebruiker online is. DIt moet hij doen door uit de tabel 'f_online' de gegevens te halen.

code:
1
2
3
4
5
6
7
8
SELECT p.post,p.user,p.body,p.date,p.edit,p.editdate,p.code,p.ip,g.id,g.gebruikersnaam,g.website,g.icon,g.onderschrift,g.sig, s.s_rank, s.f_rank, s.m_rank
FROM f_post p, f_topic t, gebruikers g, gebruikers_settings s
WHERE p.topic = $id
AND g.id = p.user
AND t.topic = $id
AND g.id = s.id
ORDER BY p.post ASC
LIMIT $start, $ppp


Dit is me normale query. Nu dacht ik, dan voeg ik aan de SELECT o.user AS onlineuser toe, en dan aan FROM f_online o. Helaas werkte dit niet, kreeg veel te veel resultaten, en allemaal dubbel. Als een AND p.user = o.user toevoeg krijg ik alleen de resultaten als de user ook echt online is.

Hoe kan ik dit nou oplossen dat ik gewoon alle resultaten krijg, en een waarde als hij wel online of een waarde als hij niet online is :? Al vast bedankt voor de moeite

Verwijderd

als je je scripts ook post zullen we die ook wel ff afmaken :p
wat wil je precies.... van dit resultaat ook nog aan toegevoegd wie online of offline is. of alleen resultaat van online users?

Verwijderd

Topicstarter
Nee, het scripten verder lukt me wel. Gaat alleen om de query. Ik wil net zoals hier op het forum laten zien of de user online is of niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je moet die tabel gewoon in je FROM lijst opnemen, en het veld dat je wilt laten zien in je select-lijst.

Daarnaast moet je dan natuurlijk ook nog gaan JOINEN (zoals je nu al doet voor alle andere tabellen).
Ik geloof dat je dat joinen vergeten bent voor die tabel, aangezien je zegt dat je teveel records terugkrijgt.
Als je geen join specifieert, zal de Database nl. een cartesisch produkt gaan weergeven.

https://fgheysels.github.io/


Verwijderd

Topicstarter
SELECT p.post,p.user,p.body,p.date,p.edit,p.editdate,p.code,p.ip,g.id,g.gebruikersnaam,g.website,g.icon,g.onderschrift,g.sig, s.s_rank, s.f_rank, s.m_rank, o.user AS onlineuser
FROM f_post p, f_topic t, gebruikers g, gebruikers_settings s, f_online o
LEFT JOIN f_online ON p.user=o.user
WHERE p.topic = $id
AND g.id = p.user
AND t.topic = $id
AND g.id = s.id
ORDER BY p.post ASC


Zo'n join? Nu krijg ik nog meer resultaten :s 1450 om precies te zijn ipv 5 die er moeten zijn.

Verwijderd

je doet 2 keer die f_online nu ophalen, raar he dat je veel records terug krijgt :)

Verwijderd

Topicstarter
DOM, je hebt gelijk. Hij is gelukt :) en hij is nog snel ook :) 0.0034 sec in phpMyAdmin voor 23 resultaten.

code:
1
2
3
4
5
6
7
8
9
SELECT p.post,p.user,p.body,p.date,p.edit,p.editdate,p.code,p.ip,g.id,g.gebruikersnaam,g.website,g.icon,g.onderschrift,g.sig, s.s_rank, s.f_rank, s.m_rank, f_online.user AS onlineuser
FROM f_post p, f_topic t, gebruikers g, gebruikers_settings s
LEFT JOIN f_online ON p.user=f_online.user
WHERE p.topic = $id
AND g.id = p.user
AND t.topic = $id
AND g.id = s.id
ORDER BY p.post ASC
LIMIT 0 , 30

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Waarom doe je een left join?
Da's helemaal niet nodig. Weet je wel wat een left-join is? Die gaat alle records gaan ophalen uit de linker-tabel, en de records uit de rechter-tabel die erbij horen. Ook als er geen gerelateerde records zijn in de rechter-tabel, wordt het linker-record opgehaald. (simpel uitgelegd).
Een LEFT JOIN is ook trager dan een INNER join, dus als je geen LEFT JOIN nodig hebt, dan gebruik je best een gewone join.

Je kan dat doen dmv de INNER JOIN clause, of je doet het op de manier zoals je het gedaan hebt voor je andere tabellen:
code:
1
2
3
4
5
select bla....
from tabel1, tabel2, tabel3, tabel4, tabel5
WHERE tabel1.id = tabel2.fk
and tabel2.id = tabel3.fk
and ...

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik geloof je echt, want je weet meer dan ik van MySQL. Maar me parsetijd is lager met LEFT JOIN

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Heb je de nodige indexen gelegd?

https://fgheysels.github.io/

Pagina: 1