[SQLite] Kartesisches Produkt mit Random Datensätze

Hallo zusammen,

ich habe mal eine Frage zur folgenden Problematik:
Ich habe eine Tabelle "Track" die alle Tracks (einer CD) beinhaltet. Jeder Track hat entsprechend eine gewisse Laufzeit (Duration).

Ich möchte nun bestimmen, welche bestimmten Tracks (Random) zu einer gesamten Laufzeit sein könnten. So eine Art Random-Playlist.

Das heißt, ich will alle Tracks, die ich in 120 Minuten beispielsweise spielen möchte/kann. Dafür brauch einen einen "running value" der Laufzeit für alle Tracks.

Nun habe ich folgenden Ansatz, der mit dem kartesischen Produkt arbeiten. Jedoch bekomme ich nur Schwachsinn heraus:

Code:
SELECT
	t.ID,
	t.Artist,
	t.Title,
	t.Remix,
	t.Duration,
	SUM(t1.Duration) as RunningValue
FROM
	tracks t
	INNER JOIN tracks t1 ON t1.ID <= t.ID
GROUP BY
	t.ID,
	t.Title,
	t.Remix,
	t.Duration

Das Problem was ich nun habe ist aber, dass ich immer die selben Werte habe und nicht random.
Hatte mir auch schon überlegt anstatt "FROM tracks t INNER JOIN.." zu machen, einfach Subselects zu nutzen und mit ORDER BY Random() durchzumischen, dort bekomme ich aber dann Probleme mit dem kathesischen Produkt.

Habt ihr eine Idee wie ich dies machen kann?

Lieben Gruß
 
Zuletzt bearbeitet:
damit ich den kram richtig verstanden habe:

du willst random playlists der länge <= 120 min






erstelle eine neue tabelle der form pl_ID;t_ID

[start]

wähle einen identifizierenden wert als pl_ID ...
initialisiere einen laufzeit counter (lc) mit 0

nun lasse ein einzelnes select mit order by Random() auf deine tracks tabelle laufen, und itteriere das ergebnis

wenn der wert duration der jeweiligen ergebniszeile + lc <= 120 min ist, erzeuge in deiner tabelle einen neuen eintrag bestehend aus dem gewählten pl_ID und dem ID wert der ergebniszeile... aktualisiere lc

wenn der wert duration der ergebniszeile + lc > 120 min ist, gehe zur nächsten ergebniszeile

für jede weitere playlist, wiederhole den vorgang ab [start]

die resultierenden playlists haben noch keine reihenfolge (abgesehen von der schreibreihenfolge in der tabelle ...)
 
Ja genau. Am liebsten wäre es halt, wenn man das mit einer Abfrage machen könnte. Aber damit hab ich mich eigentlich schon abgefunden, dass das nicht geht. Aktuell habe ich mir eine Tabelle angelegt und fülle die mit Random-Tracks. Wie du es auch schon gesagt hast.

Deine Lösung ist eigentlich auch das, was ich mir am WE ausgedacht hatte.
Aber in einem SELECT wird das vermutlich unmöglich sein, oder?
 
Zurück
Oben