Restriktive Foren

Thema:
eröffnet von J_Oxtrap am 10.09.05 02:42
letzter Beitrag von J_Oxtrap am 27.03.03 14:02

1. Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von J_Oxtrap am 23.03.03 23:41

Anregung / Wunsch für auf der ersten Seite:

Anstatt die x neuesten Beiträge anzuzeigen, nur die x Threads, wo Beiträge am neuesten zugekommen sind...
2. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 24.03.03 01:15

genaugenommen wird auch nur der Thread angezeigt. Du meinst vielleicht, dass bei besonders aktiven Threads die alten Beiträge aus der last40Answerlist verschwinden sollten, damit nicht von 40 Einträgen vielleicht 10 zu einem Thread gehören.

Das wäre, wenn überhaupt, nur für die nächste Version realisierbar. Ich muss mal darüber nachdenken, ob man dafür eine passende Datenbankanfrage findet.
3. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 24.03.03 17:52

nene, nicht ganz so einfach. Ich rede von SQL-Anfragen.
4. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von JustSeeDontTouch am 24.03.03 19:08

Hi Johni,

Zitat
nene, nicht ganz so einfach. Ich rede von SQL-Anfragen.


SELECT Thread FROM Letzte_Threads GROUP BY Thread LIMIT 40;

Viele Grüße
JustSeeDontTouch
5. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von J_Oxtrap am 25.03.03 01:39

Ja, ich wollte nicht "die Threads, die die 40 neuesten Messages enthalten", sondern "die 40 bzw. 20 letzten Threads, wo Messages angekommen sind". Das entspricht der SQLAnfrage von JustSeeDontTouch.

Eine andere Möglichkeit wäre, eine last_active_threads Set zu pflegen mit begrenzter Länge: Jedesmal, wenn eine Nachricht hinzugefügt wird, wird ihr Thread als letzten in die Set gehängt, dabei wird er nur zur letzten Position verschoben, wenn er schon drinnen war, dazu gegeben, wenn die Set noch nicht voll war, oder der Thread, der in erster Position war, wird aus der Set genommen, um Platz zu schaffen. Das Ganze ist SQLmässig nicht schwierig, und das Anzeigen der neuesten Threads ist keine echte Query mehr, sondern nur noch Auflisten der fertig gepflegten Set.

Naja, für die nächste Version... Oder die übernächste!
6. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von JustSeeDontTouch am 25.03.03 05:16

Hi J_Oxtrap,

Zitat
Ja, ich wollte nicht \"die Threads, die die 40 neuesten Messages enthalten\", sondern \"die 40 bzw. 20 letzten Threads, wo Messages angekommen sind\". Das entspricht der SQLAnfrage von JustSeeDontTouch.


nein, tut es nicht. Mit "Letzte_Threads" ist die aktuelle Liste gemeint.

Viele Grüße
JustSeeDontTouch
7. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von JustSeeDontTouch am 25.03.03 05:30

Hi Johni,

Zitat
SELECT
nachrichten_table.ThreadID,
nachrichten_table.PostSubject,
nachrichten_table.PostTime,
thread_table.ThreadName,
user_table.uName,
thread_table.BoardID
FROM
nachrichten_table
LEFT JOIN user_table ON (nachrichten_table.nUserID = user_table.UserID AND user_table.ForumID=1)
LEFT JOIN thread_table ON (nachrichten_table.ThreadID = thread_table.ThreadID AND thread_table.ForumID=nachrichten_table.ForumID)
WHERE
nachrichten_table.ForumID = 1 AND
ORDER BY nachrichten_table.PostTime DESC
LIMIT 40


was ich nicht verstehe sind "user_table.ForumID=1" und "nachrichten_table.ForumID = 1".

Da ich jetzt keine Daten zum Testen hab sehe ich drei Möglichkeiten:

a.) Es funktioniert schon wenn Du einfach ein GROUP BY anhängst. Kritisch ist vor allem welche Zeit/welcher User/... dann angezeigt wird.

BTW: Die Zeit brauchst Du doch eigentlich gar nicht zu SELECTen, oder?

b.) Du machst das mit einer SubQuery. Also das "LIMIT 40" raus und zusammen mit "GROUB BY" in das äußere SELECT.

c.) Du hast ein MySQL daß das noch nicht kann: zur Not in eine temporäre Tabelle schreiben. Die paar mal am Tag an der eine Nachricht geschrieben wird sollte das zu verkraften sein. Falls nicht eine eigene Datenbank/Tabelle im RAM nehmen. Die "innere" (Sub)Query kannst Du dann ja z.B. auf 100 oder so LIMITen. Wenn nicht gerade dummerweise die letzten 100 Beiträge aus einem Thread sind paßt das schon.

Wenn Du mir sagst welche Datenbank Du nimmst und mir die Daten zur Verfügung stellst (können auch Beispieldaten sein) teste ich das auch gerne mal.

Viele Grüße
JustSeeDontTouch
8. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von J_Oxtrap am 25.03.03 12:49

Meine Idee war nicht, eine Query an die existierenden Tabellen zu schicken, sondern eine extra Tabelle mit den letzten Threads zu pflegen.

OK, ich mach s selber, sobald ich mit PHP ein bißchen rumgespielt habe (in einigen Wochen). Es eilt eh nicht.
9. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 25.03.03 19:43

@J_Oxtrap
es wird keine Extratabelle geben, da dieses Problem auch mit einer Tabelle lösbar ist. Redundanzen sind nicht gut.

@JustSeeDontTouch
ForumID=1 definiert das Forum, in dem man sich befindet. Es ist ja eine Multiforumsoftware. Hat also nichts mit der Sache zu tun.

Zitat

a.) Es funktioniert schon wenn Du einfach ein GROUP BY anhängst. Kritisch ist vor allem welche Zeit/welcher User/... dann angezeigt wird.

genau deshalb scheint er auch zu streiken. Group By erzeugt nur eine Fehlermeldung.
Zitat

BTW: Die Zeit brauchst Du doch eigentlich gar nicht zu SELECTen, oder?

die wird auch mit erscheinen.

Zitat

b.) Du machst das mit einer SubQuery. Also das \"LIMIT 40\" raus und zusammen mit \"GROUB BY\" in das äußere SELECT.

ich wüsste nicht, dass SubQuery (also subselect) schon funktioniert.

Zitat

Wenn Du mir sagst welche Datenbank Du nimmst und mir die Daten zur Verfügung stellst (können auch Beispieldaten sein) teste ich das auch gerne mal.


wenn Du möchtest, gebe ich Dir einen Zugang zu meinem phpMyAdmin. Dann kannst Du die Frage direkt am Beispieldatensatz testen.

Gruß
10. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von J_Oxtrap am 25.03.03 20:07

Zitat
es wird keine Extratabelle geben, da dieses Problem auch mit einer Tabelle lösbar ist. Redundanzen sind nicht gut.


?? Ihr habt gerade Schwierigkeiten, eine Lösung ohne extra Tabelle zu finden, also bitte!

Der Unterschied ist: Entweder eine zusätzliche einfache Query auf eine kleine (40 Einträge) extra Tabelle nur beim Schreiben einer neuen Message, oder eine komplizierte Query auf der ganzen Datenbank jedesmal, wenn jemand sich die 1. Seite anschaut. Aus Effizienzgründen sowie aus Einfachheits- und Lesbarkeitsgründen empfiehlt sich die "redundante" Lösung...


Aber egal, ich bin eh kein Datenbankspezialist, mach wie es Dir am besten scheint.
11. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 26.03.03 00:33

es ist unser oberstes Ziel die Queryzahl minimal zu halten, da wir mit Riesenmengen an Zugriffen rechnen müssen. Deshalb versuchen wir so sowenig wie möglich, so viel wie möglich herauszuholen.

Eine richtige Select-Anfrage kann das lösen, wenn man den Group by Befehl richtig beherrschen würde. Das ist bei mir noch nicht der Fall...
12. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von JustSeeDontTouch am 26.03.03 05:09

Hi Johni,

Zitat
wenn Du möchtest, gebe ich Dir einen Zugang zu meinem phpMyAdmin. Dann kannst Du die Frage direkt am Beispieldatensatz testen.


ja, gerne. Ich hab zwar mit phpMyAdmin noch nicht wirklich gearbeitet, aber wenn man die MySQL-Shell kennt dürfte das sicher kein Problem sein.

Viele Grüße
JustSeeDontTouch
13. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 26.03.03 18:39

ich integriere das gerne in die nächste Version, jedoch konnte ich Deiner Erklärung nicht folgen. Mach mir mal ein Beispiel-Query dafür.


@JustSeeDontTouch
Group by ist sicherlich der richtige Ansatz. Die Anfrage ist allerdings weit komplexer und die Lösung bisher noch nicht gefunden.

Wir haben eine Nachrichten_tabelle mit einer nachrichtenID als Schlüssel. In jeder Nachricht steht die ThemenID, die sagt, zu welchem Thema die Nachricht gehört. In der Thementabelle stehen Infos wie Name des Themas etc.


SELECT      
     nachrichten_table.ThreadID,  
     nachrichten_table.PostSubject,
     nachrichten_table.PostTime,
     thread_table.ThreadName,
     user_table.uName,
     thread_table.BoardID
FROM
     nachrichten_table
LEFT JOIN user_table ON (nachrichten_table.nUserID = user_table.UserID AND user_table.ForumID=1)
LEFT JOIN thread_table ON (nachrichten_table.ThreadID = thread_table.ThreadID AND thread_table.ForumID=nachrichten_table.ForumID)
WHERE
     nachrichten_table.ForumID = 1
     ORDER BY nachrichten_table.PostTime DESC
     LIMIT 40

Es ist mir noch nicht gelungen, der Datenbank zu erklären, dass es nur einmalige nachrichten_table.ThreadID zu verwenden hat.

Ich nehme gerne Deine Hilfe an.

Gruß


 
14. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von J_Oxtrap am 26.03.03 21:29

Zitat
es ist unser oberstes Ziel die Queryzahl minimal zu halten


!! Dann ist es viel besser, eine Query nur beim Einfügen einer neuen Nachricht auszulösen, anstatt jedesmal, wenn jemand sich die Hauptseite anschaut! Nicht?



Ansonsten, über GROUP_BY: Ich habe damals ein bißchen mit Delphi herumgespielt, und ich glaube, mich zu erinnern, daß es Konflikte zwischen GROUP_BY und ORDER_BY geben kann, nämlich hier: Wenn Du by ThreadName groupst, enthält jede Gruppe mehrere Einträge, die unterschiedliche PostTimes haben, so daß Du nicht mehr by PostTime ordern kannst; Umgekehrt, wenn Du by PostTime orderst, sind die einträge in einer Reihenfolge, wo die ThreadNames bunt gemischt sind, so daß Du nicht mehr by ThreadName groupieren kannst... So eine Idee. Ich bin mir nicht mehr ganz sicher, aber das Problem habe ich schon irgendwann mal gehabt. SQL ist nicht sooo gelenkig...
(Diese Nachricht wurde am 26.03.03 um 21:29 von J_Oxtrap geändert.)
15. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 26.03.03 21:30

deswegen muss man die anderen Spalten gesondert groupieren z.b. mit min(), max(), avg() oder sum().

Doch das geht irgendwie auch nicht.
16. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von JustSeeDontTouch am 27.03.03 05:48

Hi J_Oxtrap,

Zitat
!! Dann ist es viel besser, eine Query nur beim Einfügen einer neuen Nachricht auszulösen, anstatt jedesmal, wenn jemand sich die Hauptseite anschaut! Nicht?


ja da hast Du Recht.

Zitat
Ansonsten, über GROUP_BY: Ich habe damals ein bißchen mit Delphi herumgespielt,


Was hat Delphi mit SQL zu tun

Viele Grüße
JustSeeDontTouch
17. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von Johni am 27.03.03 05:51

>>!! Dann ist es viel besser, eine Query nur beim Einfügen einer neuen Nachricht auszulösen, anstatt jedesmal, wenn jemand sich die Hauptseite anschaut! Nicht?

wir haben hier eine andere Lösung vorgesehen. Es werden komplette Module als HTML-Version gecacht. Doch das Teil ist noch nicht fertig.
18. Re: Neueste Beiträge: Nur 1 pro Thread anzeigen

geschrieben von J_Oxtrap am 27.03.03 14:02

Zitat
Was hat Delphi mit SQL zu tun?


Bei Delphi gab es gute und einfache Datenbankanbindungsobjekte, die sanft einen sich mit SQL konfrontieren ließen.


Zitat
Es werden komplette Module als HTML-Version gecacht.


OK, meine Idee war eigentlich nichts anderes, als die Info in einer extra Tabelle zu cachen, und diese dann bei jeder Änderung zu verwalten, anstatt ein cached/uncached Status bei jeder Änderung zu verwalten. Aber so weit weg voneinander waren wir doch nicht.

Ich melde mich wieder, sobald ich ein bißchen mit PHP herumgespielt habe, aber es dauert noch einige Wochen (ich ziehe im Mai von Südfrankreich nach Berlin um, sowas frißt Zeit).


Impressum
© all rights reserved, 2024