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

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: akretschmer
akretschmer 15.04.2021 um 22:14:14 Uhr
Goto Top
ORDER BY
Mitglied: wiesi200
wiesi200 16.04.2021 um 04:58:02 Uhr
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
Mitglied: akretschmer
akretschmer 16.04.2021 um 09:24:06 Uhr
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)
Mitglied: SlainteMhath
SlainteMhath 16.04.2021 aktualisiert um 09:56:45 Uhr
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
Mitglied: MichaelR08
MichaelR08 16.04.2021 um 21:27:23 Uhr
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....
Mitglied: akretschmer
akretschmer 17.04.2021 um 10:26:30 Uhr
Goto Top
"funktioniert nicht so wirklich" ist natürlich eine irre gute Fehlerbeschreibung. Viel Erfolg noch!
Mitglied: SlainteMhath
SlainteMhath 19.04.2021 um 08:31:45 Uhr
Goto Top
Meine Lösung war ein bischen mehr als "ORDER BY" - und funktioniert so auch.

Den rest hat @akretschmer ja schon geschrieben...
Mitglied: wiesi200
wiesi200 19.04.2021 aktualisiert um 09:03:02 Uhr
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