Wie bekomme ich die 10 neuesten Nachrichten.

starter/or_not

Grünschnabel
Hallo. Ich probier gerade einmal ein Forum zu erstellen. Soweit funktioniert auch alles, aber
beim letzten scheitert ich nun irgendwie. Ich hoffe es ist nicht zuviel verlangt wenn ich nun
hier frage, ob mir jemand weiterhelfen kann

Also als Beispiel nun einmal nur mit 4 Tabellen und alles vereinfacht:

- foruminsgesamt
- themen1
- themen2
- detail1
- detail2

Die Tabelle: fouminsgesamt hat die Spalte: id in der dann in diesem Falle 1, 2 gespeichert ist.

Die Tabellen: themen* haben die Spalten: t_id, thema
Die Tabellen: detail* haben die Spaalten: d_id, t_id, nachricht, datum

Somit wird z.B. ein Thema erstellt das die t_id = 1 hat und die Nachricht ansich
wird mit z.b. d_id=1, t_id=1 in die Tabelle detail1 gespeichert.

Nun möchte ich die letzten 10 aktuellen Beiträge auf alle Tabellen bezogen auslesen.

Zuerst lese ich dann die Tabelle: fouminsgesamt in einen Array:
.
.
while ($row = mysql_fetch_row($rs))
{
$zahlen[] = $row[0];
}
.
.

dann frage ich alle tabellen ab:

for ($i=0; $i<count($zahlen); $i++) {
$query = "SELECT * FROM themen$zahlen[$i] as tab1, detail$zahlen[$i] as tab2 ORDER BY tab2.datum DESC";

das klappt noch alles wunderbar. aber wie kann ich das nun beschränken, das ich nur 10 Einträge habe?
Wenn ich nun am ende noch ein LIMIT 10 setze, dann bekomme ich zwar nur 10 Einträge aber alle
nur aus der datail1 tabelle.
Gibt es dafür eine Lösung? Ich hoffe das hat überhaupt jemand verstanden, so seltsam wie das erklärt ist
Vielen Dank schon einmal. ;)
 
Mit Limit

Hey.

Dein Problem ist ganz leicht zu lösen und zwar mit limit.
Kleines Beispiel:
SELECT * FROM DEINE_TABELLE LIMIT 0,10
spuckt dir die ersten 10 aus.

Greets
TheVirus
 
hallo,
das hatte ich schon probiert. aber dann bekomme ich die ersten 10 von allen tabellen raus. also in diesem falle dann 20 ergebnisse.
aber ich hätte gerne INSGESAMT die 10 neuesten einträge auf alle tabellen bezogen.
 
mal ne ganz Dumme Frage zurück: warum benutzt Du da jeweils 2 Tabellen? Würde es nicht ausreichen, in einer Tabelle die Themen, und in einer zweiten Tabelle die Posts zu speichern ???

Naja, egal. Dadurch daß Du das in mehreren Tabellen hast, und mit der for-Schleife aus jeder Tabelle ausliest kommen natürlich bei jeder Abfrage 10 Einträge raus ... also insgesamt 20 (bei 2 Tabellen).

Wenn Du das mit den Tabellen wirklich so lassen willst, dann muss hinter dem Limit eben eine 5 stehen, dann bekommst Du aus beiden Tabellen jeweils 5, macht zusammen 10 ;)

Aber so richtig logisch is das trotzdem net ....

Gruß
Dunsti
 
Also ich finde das alles schon logisch :p
Und insgesamt sind es ja nicht zwei sondern 10 also 20 Tabellen.
Und in einer steht immer das Thema ansich und in der anderen
dann die Nachrichten zum Thema.
und wenn ich das nun alles nur in zwei tabellen ablegen würde sind diese ja bei vielen postings super voll und groß ...

Aber ich löse das nun anderst über einen cronjob der dann ab und
zu die neuen Nachrichten in eine extra Tabelle legt. Dann brauch
ich nur diese abzufragen. Anderst scheint es ja nicht zu gehen.

Trotzdem danke :)
 
naja, ob Du nun 20 Tabellen hast, die mit der Zeit wachsen, oder ob Du's in 2 legst, die dann insgesamt genausogroß sind wie die 20 ....

Da würde ich aber die 2 Tabellen bevorzugen, vor allem, weil es einiges leichter und Übersichtlicher ist. ;)

Und auch die Funktion mit den 10 neuesten Nachrichten würd ohne großen Aufwand gehen ;)

Gruß
Dunsti
 
Naja. Aber es macht doch einen Unterschied ob man nun
eine Tabelle durchsucht bei der die Kategorien übereinstimmt
oder nur in einer, in der Tabelle sucht in der nur Inhalte dieser Kategorie liegen. Und durch Aufteilung wird es schon schneller. Dachte ich zumindest immer ;)
 
dafür gibt es in MySQL die WHERE-Bedingung.
Stell Dir vor, Du hast eine Spalte in der Tabelle, wo die zugehörige Kategorie drinsteht (als Nr.)
Wenn Du dann den Befehl "SELECT * FROM tabelle" mit "WHERE kat=1" erweiterst bekommst Du nur die Einträge der Kategorie 1 als Ergebnis.

WHERE-Bedingungen lassen sich übrigens beliebig UND-/ODER- Verknüpfen.

Beispiel: "SELECT * FROM tabelle WHERE kat=1 AND (post=25 or post=26)" usw.

Zu der Geschwindigkeit: Du wirst bei beiden Varianten keinen Geschwindigkeitsunterschied merken. Allerdings ist die Variante mit nur einer Tabelle meiner Meinung nach übersichtlicher, und leichter zu handhaben.
Was natürlich nicht heißt, daß Du die andere Variante nicht auch nehmen kannst, nur wirds dann in einigen Punkten eben komplizierter. (Bestes Beispiel ist Deine ursprüngliche Frage: Mit der "Eine-Tabelle"-Version brauchst Du nur ein simples LIMIT. Bei der anderen Variante musst Du umständlich die 10 neuesten Beiträge aus den ganzen Tabellen zusammentragen. ;) )

Gruß
Dunsti
 

Neue Beiträge

Zurück