WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 07.11.2004, 20:16   #1
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard [SQL] ORDER Problem

PHP-Code:
        $query SQL("SELECT T.*,P.Post_Time FROM ".TABLE_TOPICS." T, ".TABLE_POSTS." P WHERE T.Topic_Group = '".$Group_ID."' AND T.Topic_Index_Show = '1' AND P.Post_Topic_ID = T.Topic_ID GROUP BY T.Topic_Date ORDER BY P.Post_Time DESC,T.Topic_Date DESC, T.Topic_Sticky ASC",__FILE__,__LINE__); 
ich hab also 2 tables. eine mit themen und eine mit beiträgen (antworten)
nun sollen die jüngsten themen als oberstes stehen. also entweder die als letztes geschrieben wurden oder auf die als letztes geantwortet wurde. und dann gibt es noch die option "sticky" die is entweder 0 oder 1 und dann sollen die vor allen anderen dastehn.
aber irgendwie ignoriert mir der einfach alles
Potassium ist offline   Mit Zitat antworten
Alt 08.11.2004, 03:39   #2
JackLemon
Senior Member
 
Registriert seit: 02.11.2002
Beiträge: 179


Standard

musst hierarchisch sortieren. wenn die sticky-beiträge ganz oben sein sollen musst du _zuerst_ nach sticky sortieren, den rest (sowohl die sticky=1 als auch =0) sortierst du dann weiter... wenn du neue und geänderte beiträge "durcheinander" anzeigen möchtest wirst du das mit einem einzigen (gemeinsamen) feld machen müssen, sonst sortiert er immer zuerst nach dem einen, und die entstehenden untergruppen nach dem anderen. hoffe das war jetzt irgendwie verständlich...
____________________________________
It\'s not a bug... It\'s a feature!

You know, the main advantage of encrypted paella over ordinary paella is that nobody but you knows what you are eating... (Alvaro)
JackLemon ist offline   Mit Zitat antworten
Alt 08.11.2004, 07:16   #3
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard

naja das feld von der dem themen-datum soll ignoriert werden wenn schon antworten eingetragen wurden und dann stattdessen das datum der antwort zum sortieren benutzt werden. wie mach ich das?
Potassium ist offline   Mit Zitat antworten
Alt 08.11.2004, 09:17   #4
snowman
Inventar
 
Registriert seit: 26.09.1999
Beiträge: 2.569


Standard

Ich habe mich mit Foren noch nicht wirklich beschäftigt, aber eventuell wäre ein Extra-Datumsfeld in der Thementabelle eine Möglichkeit, das auch mit dem Antwortdatum upgedatet wird, wenn Antworten erstellt werden.

gruss,
snowman
____________________________________
MediaMarkt? Ich bin doch nicht blöd, Mann!

Vorsprung durch Technik

Lesen Sie keine Anleitungen, FAQs, Readme - Files. Reine Zeitverschwendung. In den Newsgroups und Foren gibt es genug kompetente Leute, die mit großer Geduld immer wieder dieselben einfachen Fragen beantworten. Völlig kostenlos noch dazu!
snowman ist offline   Mit Zitat antworten
Alt 08.11.2004, 11:59   #5
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Ich hab zwar in meinem Forum noch keine Sticky-Posts (stehen ziemlich weit unten auf der TodoList ), aber den ganzen kram von wegen letzer Beitrag, letzter User, etc.

tblForThreads sind die ForumThreads, tblForPosts sind die Posts,
FT_ID=Forumthread-id, FS_ID=Forumsection-id, Rest erklärt sich glaub ich von selbst.

Du müsstest afaik noch sticky auslesen und zusätzlich danach sortieren.

SQL-String schaut so aus:
SELECT tblForThreads.FT_ID, tblForThreads.FS_ID, tblForThreads.Hits,
Max(tblForPosts.Datum) AS MaxDatum, Count(FP_ID) As Answers,
Min(US_ID) as CreatorID, Max(US_ID) as LastposterID
FROM tblForThreads
INNER JOIN tblForPosts ON tblForThreads.FT_ID = tblForPosts.FT_ID
WHERE tblForThreads.FS_ID = $FSID
GROUP BY tblForThreads.FT_ID, tblForThreads.FS_ID, tblForThreads.Hits
ORDER BY MaxDatum DESC

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 08.11.2004, 17:24   #6
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard

hi danke erstmal.
@snowman: das prob ist ich möchte das ganze so "dynamisch" wie möglich halten. d.h. ich möchte keine endlose löschprozedur für posts sondern einfach den entsprechenden eintrag entfernen. und dann wäre die zeit ja wieder falsch.

@t.dot
ich hab nun in anlehnung an dein beispiel mit MAX() folgendes gemacht.
PHP-Code:
$query SQL("SELECT T.*,P.*,MAX(Post_Time) AS Max_Time FROM ".TABLE_TOPICS." T,".TABLE_POSTS." P WHERE P.Post_Topic_ID = T.Topic_ID AND T.Topic_Group = '".$Group_ID."' GROUP BY T.Topic_ID ORDER BY Max_Time DESC",__FILE__,__LINE__); 
aber wenn ein thema nun noch keine antworten enthällt soll das themen-datum genommen werden ansonsten aber nicht, wie bau ich das ein?
Potassium ist offline   Mit Zitat antworten
Alt 08.11.2004, 18:23   #7
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Nun ja, bei mir ist die Struktur so aufgebaut, dass ein Thread mindestens ein Post hat. Und sobald ein Post vorhanden ist gibts auch ein max(datum) davon.

Wenn du aber das Startpost/die Frage/... in die Threadtabelle schreibst (vermut ich mal, sonst müsst ja meines funktionieren) wird dir nichts anderes übrig bleiben als nachher per SQL abzufragen ob ein Wert für das max(datum) vorhanden ist.

Unter Umständen bekommst du auch ein Problem, da die Verknüpfung von Thread zu Post nicht mehr funktioniert, da ja keine Posts für den Thread vorhanden sind. Das kannst du aber über ein left oder right join, je nach anwendung, lösen...

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 08.11.2004, 18:45   #8
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard

Zitat:
Original geschrieben von T.dot
Wenn du aber das Startpost/die Frage/... in die Threadtabelle schreibst (vermut ich mal, sonst müsst ja meines funktionieren) wird dir nichts anderes übrig bleiben als nachher per SQL abzufragen ob ein Wert für das max(datum) vorhanden ist.

Unter Umständen bekommst du auch ein Problem, da die Verknüpfung von Thread zu Post nicht mehr funktioniert, da ja keine Posts für den Thread vorhanden sind. Das kannst du aber über ein left oder right join, je nach anwendung, lösen...

mfg Thomas
ad 1: wie frag ich das am besten ab?
ad2: wie meinst du mit joins? mit denen hab ich noch nie gearbeitet und ich hab ka was ich mit denen genau soll.
Potassium ist offline   Mit Zitat antworten
Alt 08.11.2004, 19:35   #9
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Sorry hab mich verschrieben, ich meinte eigentlich per PHP überprüfen ob der Wert vorhanden ist oder nicht.

Joins ganz einfach:

du machst es vermutlich so, wenn du was verknüpfst:
select * from tblThreads,tblPosts
where tblThreads.Thread_id=tblPosts.Thread_id

mit joins gelöst sieht das so aus

select * from tblThreads
INNER JOIN tblPosts ON tblThreads.Thread_id=tblPosts.Thread_id


jetzt gibt es die Möglichkeit die Tabellen so zu verknüpfen, das zb immer die Threadtabelle ausgelesen wird, auch wenn bei der Verknüpfung zur Poststabelle nix rauskommt.

select * from tblThreads
LEFT JOIN tblPosts ON tblThreads.Thread_id=tblPosts.Thread_id

right join ist das gleiche umgekehrt: es wird die tabelle rechts von join (in diesem fall tblPosts) genommen und immer die Posts ausgegeben, auch wenns keinen Thread dazu gibt (hat in diesem Fall keinen Sinn)

Dann gibts afaik noch outer join (hab ich nie verwendet) wenn ichs richtig im Kopf hab kriegst du dabei das Kreuzprodukt der beiden Tabellen, so wie wenn du "select * from tblThreads,tblPosts" machst.

Für genauere Details von Joins hab ich mich nie interessiert, aber Google und co wissen sicher mehr

Nachdem du wahrscheinlich eh irgendwas wie phpmyadmin oder so hast kannst du ja leicht die verschiedenen ergebnisse der sql-abfragen überprüfen...

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 08.11.2004, 19:53   #10
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard

OMG das is schwer. nun hab ich folgendes uamgebastelt:
PHP-Code:
$query SQL("SELECT T.*,P.*,MAX(Post_Time) AS Max_Post_Time FROM ".TABLE_TOPICS." T LEFT JOIN ".TABLE_POSTS." P ON T.Topic_ID = P.Post_Topic_ID WHERE T.Topic_Group = '".$Group_ID."' GROUP BY Topic_ID ORDER BY Max_Post_Time DESC",__FILE__,__LINE__); 
nun hat Max_Post_Time den wert NULL wenn das posting ned vorhanden is ich will aber wenn das posting ned vorhanden is, das Max_post_Time den wert Topic_Date hat. *hrmpf*
geht das auch und wenn ja wie?
Potassium ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:01 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag