• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] - Umgekehrte Sortierung

Auf meiner Website habe ich lasse ich den rechten Seitenstreifen im Inhaltsverzeichnis per Datenbankabfrage laufen. http://yehudi.info/news-2005.html
Eigentlich läuft alles so wie ich es mir vorstelle, bis auf die Tatsache, dass die Reichenfolge falsch rum ist.
Ich habe da schon mal versucht Order BY einzusetzen, aber ich bekomme es einfach nicht hin, denn dann bekomme ich gar nichts angezeigt.

Dieser Ausschnitt erledigt die für den Vorgang bestimmte Datenbankabfrage:

Code:
 {
$query = "SELECT introtext
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'";
}

sortiert soll es nach created sein, und das jüngste soll an erste Stelle stehen, und das steht in jos_content
 
so spontan:

Code:
SELECT introtext
FROM   jos_content AS c
JOIN   jos_content_frontpage AS f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'
ORDER BY c.foo DESC;
 
Leider wird da gar nichts mehr angezeigt. Es gibt dann auch keinen Error.

Momementan weiß ich aber auch nicht was ich noch an Infos geben kann, umd das Problem zu lösen. *kopfkratz*
 
Kann es sein, dass das Feld nach dem du sortieren möchtest auch mit selektiert werden muss?

Code:
 {
$query = "SELECT introtext, foo
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'"
ORDER BY foo DESC;
}
 
Ich habe mal mehrere Varianten aufgeführt, die aber nicht zu einem wünschenswerten Ergebnis führen

1. So wird zwar korekt sortiert, aber es steht auch neben jeder Aufführung der Unixtimestamp, des created, was erstens die Tabelle verbreitert, und der soll ja auch nicht da stehen.Habe ich foo an den Stellen, passiert nichts.:
Code:
{
$query = "SELECT introtext, created
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'
ORDER BY created DESC";
}

Sortierung: als Bsp. News 2005 von oben: Bundestagswahl (18.9.05), Prügelknabe (1.6.05), Papst (1.4.05),

2.

Code:
#sortiert Papst (1.4.05), Bundestagswahl (18.9.05), PrüŸgelknabe (1.6.05)
$query = "SELECT introtext AS foo
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'
ORDER BY c.foo DESC";

3. Original

Code:
#sortiert Papst (1.4.05), PrüŸgelknabe (1.6.05), Bundestagswahl (18.9.05)
$query = "SELECT introtext
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'";


In der Frontpagesortierung von oben: Bundestagswahl (18.9.05), Prügelknabe (1.6.05), Papst (1.4.05),

Momentan erscheint mir, dass die Sortierung willkürlich ist, ich habe das ganze auch noch mal mit 2004 ausprobiert, da waren neuere Beiträge unten, bei 2005 wurden sie mal oben eingehängt, mal unten.
:?: :?: :?:
Also es verändert schon mal was, ohne eine Error hervorzurufen, oder nichts anzuzeigen, das sollte man doch positiv erwähnen.
 
Yehudi schrieb:
Ich habe mal mehrere Varianten aufgeführt, die aber nicht zu einem wünschenswerten Ergebnis führen

1. So wird zwar korekt sortiert, aber es steht auch neben jeder Aufführung der Unixtimestamp, des created, was erstens die Tabelle verbreitert, und der soll ja auch nicht da stehen.

ich sach doch, Joomla ist doof :) nur weil eine Spalte im Recordset ist muss man die ja nicht gleich anzeigen...

Du brauchst die created-Zeile um nach dem Timestamp zu sortieren, wenn die aber nicht angezeigt werden soll, liegt das nicht mehr an dem SQL-Statement sondern an der Render-Funktion.
 
TeXpert schrieb:
Yehudi schrieb:
Ich habe mal mehrere Varianten aufgeführt, die aber nicht zu einem wünschenswerten Ergebnis führen

1. So wird zwar korekt sortiert, aber es steht auch neben jeder Aufführung der Unixtimestamp, des created, was erstens die Tabelle verbreitert, und der soll ja auch nicht da stehen.

ich sach doch, Joomla ist doof :) nur weil eine Spalte im Recordset ist muss man die ja nicht gleich anzeigen...

Du brauchst die created-Zeile um nach dem Timestamp zu sortieren, wenn die aber nicht angezeigt werden soll, liegt das nicht mehr an dem SQL-Statement sondern an der Render-Funktion.

Das kann man doch ganz bestimmt auch umgehen, oder?
 
Yehudi schrieb:
Das kann man doch ganz bestimmt auch umgehen, oder?
klar ;) aber ich kenne Joomla/mambo nicht gut genug...

Du musst die Rendermethode finden und patchen...

als Hack würde ich einen Prefix definieren (z.B. DONOTSHOWCOLUMN_)

dann als Abfrage

Code:
{
$query = "SELECT introtext, created AS DONOTSHOWCOLUMN_created
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'
ORDER BY DONOTSHOWCOLUMN_created DESC";
}

und in der entsprechenden Render-Methode:
Code:
if column begins with DONOTSHOWCOLUMN_ then ignore
else print content
 
Kommt mir alles ein wenig Spanisch vor. MySQL braucht im Resultset das Feld nach dem man sortiert? Ehrlich?

Aber nun gut. Noch ein Workaround wäre eine Stored Procedure zu machen und diese dann mit dem Parameter der sectionid aufzurufen. In der SP sortierst du dann das ganze.
 
Ich habs. :*freu*

Code:
{
$query = "SELECT introtext
FROM   jos_content c
JOIN   jos_content_frontpage f
ON     c.id = f.content_id
WHERE  sectionid='$sectionid'
AND    catid='$id'
ORDER BY f.ordering;
}

Natürlich habe ich da einige Trials and Errors gemacht, wobei die Errors mehr waren. Ich bin dann auf die Idee gekommen, mich von dem created, an dem ich mich festgebissen hatte zu lösen, und nochmals in die von mir mit f. bezeichnete Tabelle zu gehen. Da aber DESC das Ergebnis wieder in flascher Richtung zeigte, habe ich das einfach weggenommen, um dann endlich das von mir gewollte Ergebnis zu erziehlen. Sicherheitshalber habe ich noch mal in die anderen bereits importierten News reingeguckt. Alles sitzt an der gewollten Stelle.
Danke Euch allen, für die Hilfe.
 
Oben