michaelr08
Goto Top

SQL-Einträge priorisieren?

Halo allerseits,

ich habe folgendes Problem bzw. folgende Aufgabe bei der ich nicht weiterkomme.

Es geht um ein Nachrichten-Blog welchen ich programmieren soll (in php). Dieser ist an eine SQL-Datenbank angebunden. Die Nachrichten werden in verschiedene Kategorien eingeteilt, je nachdem um was für Nachrichten es sich handelt. Eine Kategorie lautet beispielsweise „Wichtig“. Auf der Website sollen die Nachrichten der Kategorie „Wichtig“ stets ganz oben stehen. Gibt es eine Möglichkeit diese Nachrichten in der Datenbank zu priorisieren?
Wäre da für Tipps äußerst dankbar.

Viele Grüße

Content-Key: 665791

Url: https://administrator.de/contentid/665791

Printed on: April 19, 2024 at 16:04 o'clock

Member: akretschmer
akretschmer Apr 15, 2021 at 20:14:14 (UTC)
Goto Top
ORDER BY
Member: wiesi200
wiesi200 Apr 16, 2021 at 02:58:02 (UTC)
Goto Top
Alternativ wenn Order aus nem Grund nicht geht. Wobei es zu bevorzugen ist.

Zwei Select, einmal auf Wichtig und dann auf den Rest und die mit Union verbinden
Member: akretschmer
akretschmer Apr 16, 2021 at 07:24:06 (UTC)
Goto Top
keine Garantie, daß das funktioniert:


edb=*> select * from generate_series(1,10) s union select * from generate_series(20,30)s;
 s  
----
 25
 29
  4
 30
 21
  3
 28
 22
 20
 10
  9
  7
  1
  5
  2
  6
 26
 27
 23
 24
  8
(21 rows)

edb=*> 

Ohne ORDER BY ist es der DB prinzipiell freigestellt, die Ausgabesortierung selber vorzunehmen. Hier ist es ein HahAggregate, der die Sortierung bestimmt:


edb=*> explain select * from generate_series(1,10) s union select * from generate_series(20,30)s;
                                     QUERY PLAN                                      
-------------------------------------------------------------------------------------
 HashAggregate  (cost=0.58..0.79 rows=21 width=4)
   Group Key: s.s
   ->  Append  (cost=0.00..0.53 rows=21 width=4)
         ->  Function Scan on generate_series s  (cost=0.00..0.10 rows=10 width=4)
         ->  Function Scan on generate_series s_1  (cost=0.00..0.11 rows=11 width=4)
(5 rows)
Member: SlainteMhath
SlainteMhath Apr 16, 2021 updated at 07:56:45 (UTC)
Goto Top
Moin,

ich würde das in normalisierten Tabellen abbilden

Posts: postID, KategorieID .....
Kategorie: KategorieID, Name, Prio

und dann eben
Select Posts.* , Kategorie.*
LEFT JOIN Posts.KategorieID on Kategorie.KategorieID 
ORDER BY Kategorie.Prio ASC, PostID ASC

oder optional 2 Abfragen
- eine "oben" mit den Wichtigen Kategorie, eine "unten" ohne die wichtige Kat.

lg,
Slainte
Member: MichaelR08
MichaelR08 Apr 16, 2021 at 19:27:23 (UTC)
Goto Top
Danke für eure Antworten. Auf "ORDER BY" bin ich selbst auch gekommen - funktioniert nicht so wirklich.
Ich werde es nächste Woche mal mit 2 Abfragen probieren....
Member: akretschmer
akretschmer Apr 17, 2021 at 08:26:30 (UTC)
Goto Top
"funktioniert nicht so wirklich" ist natürlich eine irre gute Fehlerbeschreibung. Viel Erfolg noch!
Member: SlainteMhath
SlainteMhath Apr 19, 2021 at 06:31:45 (UTC)
Goto Top
Meine Lösung war ein bischen mehr als "ORDER BY" - und funktioniert so auch.

Den rest hat @akretschmer ja schon geschrieben...
Member: wiesi200
wiesi200 Apr 19, 2021 updated at 07:03:02 (UTC)
Goto Top
Zitat von @SlainteMhath:

Meine Lösung war ein bischen mehr als "ORDER BY" - und funktioniert so auch.

Währ auch die schönste Lösung.

Gut man könnte das mit wichtig noch in ne separate Tabelle packen und dort mit Start und Enddatum für die Priorität versehen