WN  

Gå tillbaka   WN > Webbutveckling & webbhotell > Serversidans teknologier

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2012-08-28, 14:44   #1
frecka
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Standard

SQL sortera beroende på tråd och inlägg tid


SELECT * FROM forum_threads WHERE forum = '{$forum_id}' ORDER BY date DESC

Sådär ser min query ut när jag hämtar alla trådar när jag är i ett forum.
Just nu sorterar jag dem på när de lades ut.

Men den skall också kunna sortera när senaste inlägget i trådarna gjordes.

Så den skall alltså sortera genom både trådens och inlägges tid samtidigt för att få allt rätt sorterat.

Vill gärna ha hjälp med detta för jag har sökt mycket men inte hittat något vettigt.
Gammal 2012-08-28, 14:51   #2
Jonas
Klarade millennium-buggen
 
Jonass avatar
 
Reg.datum: Feb 2004
Inlägg: 3 356
Skicka ett meddelande via MSN till Jonas Skicka ett meddelande via Skype™ till Jonas
Standard

Kod:
SELECT forum_posts.*, forum_threads.* FROM forum_posts, forum_threads WHERE forum_threads.id=forum_posts.parent AND forum_threads.id=$id ORDER BY forum_posts.postdate DESC
Inte 100% optimerad och du bör inte återanvända den rakt av.

Dessutom bör du inte spotta in den variabeln rakt av utan jag skulle snarare göra denna varianten, om du inte använder ett språk med prepared statements samt kontrollerar all din data.

PHP-kod:
$query 'SELECT forum_posts.*, forum_threads.* FROM forum_posts, forum_threads WHERE forum_threads.id=forum_posts.parent AND forum_threads.id=%d ORDER BY forum_posts.postdate DESC';
$query sprintf($query$id); 
__________________
9 av 10 PHP problem kan bli lösta genom följande:
Kod:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Gammal 2012-08-28, 15:13   #3
frecka
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Standard

Det funkar inte eftersom när man gör trådar så läggs inget in i forum_posts och den där queryn sorterar bara efter datum på inlägg.

Om man gör en ny tråd ska den hamna högst upp även om man inte har några inlägg.
Gammal 2012-08-28, 15:23   #4
yakuzaemme
Flitig postare
 
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 360
Standard

Jag rekommenderar att i forum_threads har du enbart titel, skapare, skapad, id och så. Under forum_posts ska även det första inlägget vara.
Gammal 2012-08-28, 16:12   #5
frecka
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Standard

då måste ju forum_posts ha en kolumn som hänvisar till raden i forum_threads.

och om man bara har gjort ett vanligt inlägg, skall den kolumnen vara = 0 då?
Gammal 2012-08-28, 18:42   #6
goose
Flitig postare
 
gooses avatar
 
Reg.datum: Jun 2007
Inlägg: 376
Standard

Du får göra en outer join så tar den med rader som inte har någon forumpost kopplad
__________________
www.mklubb.se - Digital marknadsföring
Gammal 2012-08-29, 17:48   #7
frecka
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Standard

Satt o leta på Google och hittade denna:
SELECT thread_id, MAX(date) AS MaxPostTime FROM forum_posts GROUP BY thread_id ORDER BY MaxPostTime DESC LIMIT 10

Är denna optimal? Alltså den kollar ju vilken tidstämpel som är den högsta och sorterat därefter. Det funkar bra och så men är det så man ska göra eller finns det bättre sätt?

Kan man typ göra såhär då:

SELECT *, MAX(date) AS MaxPostTime FROM ...

Så man får med alla kolumner men ändå sorterar?
Gammal 2012-08-29, 19:01   #8
frecka
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Standard

Här kommer en liten uppdatering:

SELECT forum_threads.*, forum_posts.date FROM forum_posts, forum_threads WHERE forum_threads.forum = '{$forum_id}' GROUP BY forum_threads.id ORDER BY forum_posts.date DESC

Det är min nuvarande query.

Här ser ni problemet: http://fuskbugg.se/dl/nYLmnh
Gammal 2012-09-15, 21:55   #9
JesperA
Medlem
 
Reg.datum: Jul 2008
Inlägg: 74
Standard

Enklaste är ju att göra en till kolumn för forum_threads som heter något i stil med "latest_post_date" och när någon gör ett inlägg i en tråd så är det bara att köra en UPDATE `forum_threads` SET `latest_post_date`= nuvarande datum WHERE `thread_id` = tråden inlägget gjordes i"

Så är det ju sen bara att sortera efter latest_post_date sen, då behöver du inga joins, ingen GROUP BY, ingen tung query alls.

Visst kan det kännas onödigt att göra en update varje gång någon skriver ett inlägg men i förhållande till dom vägarna du försöker gå nu så det absolut inga som helt problem.

EDIT: Ojsan, denna tråden var visst flera veckor gamla, var ju nästan längst upp på första sidan så antog att den var ganska färsk, skrivs det så lite i "Serversidans teknologier" :S

Senast redigerad av JesperA den 2012-09-15 klockan 21:58
Gammal 2012-09-15, 22:27   #10
ConnyWesth
Klarade millennium-buggen
 
ConnyWesths avatar
 
Reg.datum: Aug 2005
Inlägg: 4 244
Skicka ett meddelande via MSN till ConnyWesth
Standard

är den här tråden en fortsättning på samma fråga?

http://www.wn.se/t1054831.html
__________________
Senior Backend Systemutvecklare (sedan 1988) med inriktning mot Microsoft .NET (C#, VB.NET, C, C++, J# och F#) , men även en del Java SE samt databasmodellering i SQL-server. Konsultar.
--> Höjden av optimism - Det är att utrusta en programmerare med kulspetspenna! <--
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:38.

WN - Topp

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