[SQL] join probleempje

Pagina: 1
Acties:

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Via de volgende code wil ik de laatste forum topix uit mn db trekken waarop gereageerd is :)

Alles gaat prima ook met de replies mits er geen reply geclosed is.

In mn Reply tabel heb ik een veld active als die ok is heeft ie waarde 0 issie gelocked heeft ie waarde 1

Als ik nu mn query draai count ie gewoon mn gelockte replies mee en dat wil ik niet :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 

    tbl_topics.topic_id, 
    tbl_topics.forum_id,
    tbl_topics.titel, 
    tbl_topics.text, 
    tbl_topics.active,
    tbl_topics.added,
    count(tbl_topic_replies.id) as aantal,
      tbl_topic_replies.added 

FROM tbl_topics LEFT JOIN tbl_topic_replies ON tbl_topic_replies.topic_id = tbl_topics.topic_id AND  tbl_topic_replies.active = 0

GROUP BY tbl_topics.topic_id ORDER BY tbl_topic_replies.added DESC, tbl_topics.added DESC LIMIT 10

Ik heb nu achter mn join die voorwaarde gehangen maar nu laat hij het hele topic weg als er geen reply is...

Ik zit volgens mij gewoon scheef te kijken |:(

Ja man


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

FROM ........ (minus laatste AND)
WHERE tbl_topic_replies.active = 0

?

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Nope die query komt op het zelfde neer

Als er geen replies zijn dan laat ie het hele topic weg :(

Ja man


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Voor de zekerheid ff mn laatste query
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 

    tbl_topics.topic_id, 
    tbl_topics.forum_id,
    tbl_topics.titel, 
    tbl_topics.text, 
    tbl_topics.active,
    tbl_topics.added,
    count(tbl_topic_replies.id) as aantal,
      tbl_topic_replies.added 

FROM tbl_topics LEFT JOIN tbl_topic_replies ON tbl_topic_replies.topic_id = tbl_topics.topic_id WHERE tbl_topic_replies.active = 0



GROUP BY tbl_topics.topic_id ORDER BY tbl_topic_replies.added DESC, tbl_topics.added DESC LIMIT 10

Nu laat hij dus heel simpel de nieuwe topics niet meer zien wat logisch is omdat hij in zn where naar replies wordt gevraagd :(

Ja man


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Wat jij nodig hebt, is een OUTER join.

https://fgheysels.github.io/


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
thnx :)

Ja man


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Ik heb even wat tutorials doorgelezen maar kan er niet veel soeps van maken :(

Kan je me even een zetje geven :)

Ik heb heel simpel voorbeeldje overgenomen uit een boek maar daar krijg ik een SQL error op
code:
1
2
3
SELECT tbl_topics.topic_id, tbl_topic_replies.added 
FROM tbl_topics, tbl_topic_replies
WHERE tbl_topics.topic_id = tbl_topic_replies.topic_id(+)

Ondersteund mysql deze grappen soms niet ?

Ja man


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
De syntax van een outer - join is heel DBMS-specifiek. Wat jij daar toont (met dat + tekentje), is hoe je een outer-join schrijft in Oracle. Hoe je het met MySQL doet weet ik zo niet, misschien eens de manual van MySQL doornemen?

https://fgheysels.github.io/


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
    tbl_topics.topic_id, 
    tbl_topics.titel, 
    tbl_topics.text, 
    tbl_topics.active,
    tbl_topics.added,
    count(tbl_topic_replies.id) as aantal
FROM 
    tbl_topics

LEFT OUTER JOIN 
    tbl_topic_replies ON tbl_topics.topic_id = tbl_topic_replies.topic_id 
    AND tbl_topic_replies.active = 0
    
GROUP BY 
    tbl_topics.topic_id ORDER BY tbl_topic_replies.id, tbl_topics.topic_id DESC LIMIT 10

Momenteel is dit mn query lijkt ok te lopen , ik wil alleen dat hij net zoals hier het laatst geadde item bovenaanzet of het nou een topic of een reply is...

Ik dacht dat ik het met die order by goed had opgelost maar die maakt er een rommeltje van

Ja man


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Je zal moeten gaan 'orderen' op de datum van de reply ipv het id.

https://fgheysels.github.io/


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
code:
1
ORDER BY tbl_topic_replies.added , tbl_topics.added DESC LIMIT 10

Heb dit er van gemaakt maar als ik een nieuw topic toevoeg
zie ik hem niet bovenaan komen :(

Ja man


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Ach, je voert je query uit en dan maak je een nieuw topic bij? Natuurlijk komt het er niet bij, je zal moeten requery-en of dat nieuwe topic-regeltje er manueel gaan bijvoegen bij uw list.

https://fgheysels.github.io/


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
:) dat snap ik ook wel :)

Deze query maakt een outpt op mn homepage

als ik dan in forum een update doe wil ik dat om mn homepage het nieuwste topic bovenaan staat
is er een reply van een eerder topic wil ik dat hij bovenaan staan :)

Ja man


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
code:
1
ORDER BY tbl_topic_replies.added DESC, tbl_topics.added DESC LIMIT 10

https://fgheysels.github.io/


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Hmmzz krijg ik nog steeds niet het gewenste resultaat mee :(

Ik denk dat ik het zo logisch moet zien als dat ik de 10 hoogste timestamps onder elkaar wil hebben en daarop een sort doe.

De topic titel en de gevevens die daaraan vast hangen geloof ik wel :)

dat kan dus zijn

timestamp van topic_01 maar waarop om 14.00 gereageerd is
timestamp van topic_13 die op 13.57 is geopend

etc etc

Ja man


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Natuurlijk kan ik ook gaan vals spelen door een last updated veld in te voegen in tbl_topics

Maar kan me niet voorstellen dat ik niet met SQL de juiste info eruit kan rukken :)

Ja man


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Op vrijdag 08 februari 2002 17:26 schreef LOST_GUNT het volgende:
Natuurlijk kan ik ook gaan vals spelen door een last updated veld in te voegen in tbl_topics

Maar kan me niet voorstellen dat ik niet met SQL de juiste info eruit kan rukken :)
Dat zal je idd moeten doen, want als je 2 velden in je ORDER BY clause zet, gaat hij eerst orderen op het 1ste veld en daarbinnen dan op het 2de veld. Een timestamp in de topics tabel die bijhoudt wanneer er laatst een wijziging gebeurt is is een oplossing.

https://fgheysels.github.io/


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 23:49

BierPul

2 koffie graag

Topicstarter
Uiteindelijk hebben we er dit van gebrouwen :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT 
    tbl_topics.topic_id, 
    tbl_topics.titel, 
    tbl_topics.forum_id, 
    tbl_topics.text, 
    tbl_topics.active,
    tbl_topics.added,
    count(tbl_topic_replies.id) as aantal,
    Ifnull(max(tbl_topic_replies.added), tbl_topics.added) as Sorter
FROM
    tbl_topics
LEFT OUTER JOIN 
    tbl_topic_replies ON tbl_topics.topic_id = tbl_topic_replies.topic_id 
    AND tbl_topic_replies.active = 0 AND tbl_topics.active = 0

GROUP BY 
    tbl_topics.topic_id DESC

ORDER BY
    Sorter DESC

en deze werkt :)

Ja man

Pagina: 1