topnews script

shunt

Grünschnabel
Ich wollte in meinem Newsscript eine "Topnews" Funktion (News bleibt solange die erste/neuste bis man es wieder ausstellt) integrieren. Ich dachte mir beim adden/editieren einfach eine select Funktion mit Ja/Nein zu machen. Jetzt zur eigentlich Frage, wenn ich im Script dann die Funktion einbaue:

PHP:
if ($topnews == 'ja') {
    // Was muss hier hin? :/
} else { 
    // So wie immer

Was muss ich dann einfügen? Die News werden ja nach Datum sortiert. Is das dann sowas ORDER BY $topnews ?! Danke schonmal im Vorraus :).
 
Hi!

Das sieht mir eher nach nem MySQL-Problem aus.

Du packst in deine News-Datenbank eine Spalte Datum (Typ: DATETIME) und eine Spalte TopNews (Typ: ENUM('y','n')).

Die Sortierung ist ganz einfach: ORDER BY `TopNews` DESC, `Datum` ASC

Mamphil
 
Also ich hab jetzt einen ganz normalen select gemacht:
PHP:
<select name="topnews">
    <option value="1">Ja</option>
    <option value="2"selected>Nein</option>
</select>
Jetzt zur Frage: Wie müsste ich folgende Zeile ändern damit er halt die Topnews als 1. macht und dann den Rest. Dazu käme noch das schon über 300 News gepostet wurden die dementsprechend bei Topnews noch keine Wert haben :/.

PHP:
$query_news = @mysql_query("SELECT * FROM ".$table."_news ORDER BY id DESC LIMIT $start, 10");

Vielen Dank schonmal, mfg
 
Deine Lösung ist zwar recht einfach, aber sie löst dein Problem nicht. Denn du wirst wohl kaum jeden Tag an deinem Newsscript sitzen um die Topnews wieder auszutragen per 2 oder ;)

Deshalb ist es eben wie schon von Mamphil erwähnt wichtig, das du ein Datum dazu packst. entweder per date() oder timestamp().

Setzt du nun ein Feld in deine Datenbank mit der Zeitfunktion, kannst du jede Topnews über das Formular auswählen. Statt select 1 oder 2 nun eben das heutige Datum und Uhrzeit.

Wenn die Daten dann in der DB sind, kannst du per Bedingung (WHERE) die Auswahl der Topnews so steuern, das z.B. alle Topnews die nicht älter als eine Stunde sind oder ein Tag (je nach deiner Wahl) rausgeworfen werden. Alles andere verschwindet einfach in der DB. Du kannst sogar auf einer Indexseite eine Begrenzung an Topnews auflisten (z.B. 5) und per mehr-Button auf einer weiteren Seite den Rest an Topn. auflisten.

Danach lässt du ganz einfach deine normalen News auflisten. Ebenfalls über die WHERE aber an zweiter Stelle und somit getrennt mit AND ;)

Sollten Gedankenansätze genug sein oder ;) Wenn nicht reicht melde..........
 
Doch ich will es wieder austragen :). Die Funktion ist ja nur dafür gedacht wenn es mal eine wichtige News ist, irgendwas besondere eben, das sie solange als 1. stehen bleibt bis man es wieder ausstellt. Wird also nur selten benutzt die Funktion. Ein timestamp will ich ja nicht weil ich selber bestimmen will wann sie keine Topnews mehr ist. mfg
 
Wie muss ich das nun ändern? :/ Ich habe es jetzt so gemacht das wenn man Topnews aktiviert der Wert 1 ist und bei nein ein leerer Wert gesetzt wird. Somit gehe ich auch dem Problem mit den alten news aus dem Weg. Jetzt habe ich folgendes probiert:
PHP:
$query_news = @mysql_query("SELECT * FROM ".$table."_news ORDER BY topnews AND id DESC LIMIT $start, 10");
Jetzt ist zwar die Topnews oben nur sortiert er die restlichen news genau verkehrt, er fängt also mit der ältesten an. Wo liegt mein (Denk-)Fehler? mfg
 
Hm ich gehe mal davon aus das du das DESC beim Limit nur vergessen hab weil ohne gings nicht, jetzt haut zwar die Reihenfolge wieder hin, aber die Topnews werden jetzt nach ganz unten gehauen :(
 
Du brauchst kein DESC weil das automatisch so läuft.
Wenn die Daten nicht nach ORDER BY ausgeworfen werden, mach folgendes als Test:

GROUP BY topnews ORDER BY id
 
Ich komm schon ganz durcheinander :( Also bei dieser Variante:
PHP:
$query_news = @mysql_query("SELECT * FROM ".$table."_news ORDER BY topnews, id LIMIT $start, 10");
ist alles verkehrt herum. Die älteste news zuerst und so weiter, als letztes dann die Topnews.
PHP:
$query_news = @mysql_query("SELECT * FROM ".$table."_news ORDER BY topnews, id DESC LIMIT $start, 10");
Hier stimmt zwar die Newsreihenfolge nur die Topnews ist ganz unten.
PHP:
$query_news = @mysql_query("SELECT * FROM ".$table."_news GROUP BY topnews ORDER BY id DESC LIMIT $start, 10");
Hier zeigt er nur 2 News an die Topnes als erstes dann die älteste darunter und das wars. So kann jetzt einer aus den Versionen eine funktionierende basteln? mfg
 
Zurück