WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Group By problem (https://www.wn.se/forum/showthread.php?t=25821)

nakna 2007-12-21 20:45

Har lite strul med en sql fråga

jag har ett forum där varje tråd får ett id i tagellen threads, sen i tabellen posts ligger alla inläggen. Nu vill jag ha första inlägget i varje tråd men problemet är att jag får sista inlägget i tråden.

sql satsen ser ut såhär:
select threads.timestamp, posts.subject, posts.post_id, threads.thread_id from threads, posts where threads.thread_id = posts.thread_id and forum_id = '2' group by threads.thread_id order by threads.timestamp desc, posts.post_id;

jag får trådarna i rätt ordning men det sista inlägget i tråden hamnar i 'subject'

Kan någon se vad jag gjort för fel innan jag :wacko:

nakna 2007-12-21 22:24

Fick till det själv, men det känns väldigt omständigt

Kod:

select threads.timestamp as last_comment, threads.thread_id, count(posts.thread_id)-1 as svar, (SELECT subject FROM posts WHERE posts.thread_id = threads.thread_id order by posts.post_id Limit 1) as subject, (SELECT userid FROM posts WHERE posts.thread_id = threads.thread_id order by posts.post_id Limit 1) as u_id from threads , posts
where threads.thread_id = posts.thread_id and forum_id = '2'
group by threads.thread_id order by threads.timestamp desc;

Om någon ser något som går att optimera så hojta gärna till!

martine 2007-12-21 23:02

MAX(timestamp) som urvalskriterie för grupperingen?

jonny 2007-12-22 01:06

Hmm... jag borde sova så jag kanske tänker fel, men vad får du för resultat med

Kod:

select threads.timestamp, posts.subject, posts.post_id, threads.thread_id
from threads, posts
where threads.thread_id = posts.thread_id and forum_id = '2'
group by threads.thread_id
order by threads.timestamp desc, posts.post_id [B]desc[/B];

Det är lite jobbigt att skapa en databas att provköra i :)

coredev 2007-12-22 09:47

Du löser det med en inner-sql fråga, samt group-by funktionen min:

select threads.timestamp, posts.subject, posts.post_id, threads.thread_id from threads, posts where threads.thread_id = posts.thread_id and forum_id = '2' and posts.id in (select min(id) from posts group by thread_id) order by threads.timestamp desc;

Eftersom jag inte har tillgång till din db, får du se det som pseudo-kod :)


Alla tider är GMT +2. Klockan är nu 19:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson