Zeilen aus Tabelle mit Werten aus anderer sortieren

Kohlrabisack

Benutzer
Beiträge
10
Hallo,

ich weis leider nicht weiter und den Beitragstitel hab ich so gut wie es geht formuliert.

Es geht um ein Kanbanboard welches ich selbst programmiere in PHP.
Ich habe in der Datenbank
eine Tabelle mit den Boards
eine Tabelle mit den Reihen innerhalb der Boards
eine Tabelle mit den Aufgaben je Reihe je Board

Da die Aufgaben per Drag & Drop sortiert werden können habe ich in der Tabelle mit den Reihen eine Spalte in der Kommasepariert die Aufgaben stehen z.B. 5,1,6

Nun versuche ich, beim Auslesen die Aufgaben gleich in dieser Reihenfolge auszugeben, aber ich scheitere.
Mein letzter Versuch sieht nachfolgend aus.

Code:
select kr.board_id, kr.tasksorting, kt.id, kt.board_id, kt.tasktitle
FROM kanban_rows kr
LEFT JOIN kanban_tasks kt
ON kt.id IN(kr.tasksorting)
WHERE kt.board_id = 1
#AND kt.id IN(kr.tasksorting)
#ORDER BY FIELD(kr.tasksorting, 5,1,6)
Ich weis auch nicht so recht wie ich sonst ansetzen soll, außer mit einem JOIN.

LG Maik
 
Werbung:
Deine Beschreibung dessen, was Du da hast, ist sehr oberflächlich. Generell: beachte die Regeln der Normalisierung. Kommagetrennte Listen in einem Feld sind generell ein No-Go. Mit besseren Datenbanken als der Bugsammlung, die Du da hast, könnte man noch über Datentypen wie ARRAY's nachdenken - aber in dem Falle würde ich auch mit z.B. PostgreSQL schlicht zu einem sauberen Datenmodell raten.

Wenn im Kanban in einer Reihe mehrere Aufgaben stehen können - was ja typisch ist - dann brauchst Du eine Zuordnungstabelle der Reihe und der Aufgaben. In dieser Zuordnungstabelle stehen dann nur die Foreign Keys zu der Reihe und der Aufgabe. Willst Du darüberhinaus noch eine Priorisierung - die vermutlich an der Aufgabe hängt - dann ein extra Feld an der Aufgabe. Danach kannst dann auch sortieren.

Für Anfänger rate ich von MySQL ab. Und für praktische Anwendungen auch. Also eigentlich generell.
 
Wenn ich das mal theoretisch durchgehe und mir diese Tabelle anlege:
Code:
Tabelle kanban_sorting
id| row_id | task_id
1 |      1        |     1
2 |     1        |     5
3 |     1        |     6
4 |     2        |     4
5 |     3        |     3
6 |     4        |     2
Würde dann sozusagen die Sortierung über die Spalte task_id laufen.
Boah, wenn ich darüber nachdenke was ich da jetzt alles ändern muss... :eek: nee nee. dann lasse ich das lieber so, vielleicht fällt mir da nochwas dazu ein.
Beim nächsten Projekt normalisiere ich dann wo ich nur kann.;)
 
Du brauchst eigene Spalten für Prio oder allgemein Sortierfolge. Es macht keinen Sinn, da Datenbankplatz zu sparen. Eine ID verwendet man (fast) niemals zum Sortieren.
 
Also wenn ich das jetzt komplett umstricke, brauche ich glaube einen Denkanstoß wie ich dann sortieren soll.
Ich würde halt wieder eine Zahl nehmen, aber dann kann ich auch gleich die ID nehmen bin ich der Meinung. Ich bin gerade so Lost!
 
Werbung:
eine ID ist typischwerweise vom System generiert:

Code:
edb=*# create table demo(id int generated always as identity primary key, data text);
CREATE TABLE
edb=*# insert into demo(data) values ('ein test');
INSERT 0 1
edb=*# insert into demo(data) values ('noch ein test');
INSERT 0 1
edb=*# table demo;
 id |     data     
----+---------------
  1 | ein test
  2 | noch ein test
(2 rows)

edb=*# \d+ demo
                                              Table "public.demo"
 Column |  Type   | Collation | Nullable |           Default            | Storage  | Stats target | Description
--------+---------+-----------+----------+------------------------------+----------+--------------+-------------
 id     | integer |           | not null | generated always as identity | plain    |              |
 data   | text    |           |          |                              | extended |              |
Indexes:
    "demo_pkey" PRIMARY KEY, btree (id)
Access method: heap

edb=*#

und wird gern, wie oben, als PRIMARY KEY verwendet. Als Sortiermerkmal kaum geeignet, außer, daß sie die Reihenfolge angibt, in der die Daten initial eingegeben wurden.
 
Zurück
Oben