SELECT und ORDER BY von einem Array

Thomas_Jung

Erfahrenes Mitglied
Hallo,
ich lese die Daten mit folgendem Code aus.


PHP:
$data['playlist_songs'] = '1,40,3,8,2';
$pattern = explode(',', $data['playlist_songs']);
$sql_2 =  "SELECT * FROM `abc_mp3_songs` WHERE song_id  IN ( '" . implode($pattern, "','") . "'             $statement_2 = $pdo->prepare($sql_2);      
$statement_2->execute();
$data_2 = $statement_2->fetchAll();
foreach ($data_2 as $row_2){
}


Ist es möglich das ich das Ergebnis Sortiert nach $data['playlist_songs'] ausgeben kann.
z.b.

Datensatz 1 = $row_2['song_id'] ist 1
Datensatz 2 = $row_2['song_id'] ist 40
Datensatz 3 = $row_2['song_id'] ist 3
Datensatz 4 = $row_2['song_id'] ist 8
Datensatz 5 = $row_2['song_id'] ist 2

[/php]



Neue Bitmap.jpg


Hallo,
ich möchte eine Abfrage erstellen die mir von der Tabelle "abc_mp3_saved_playlists" die jeweiligen playlist_songs holt und anschließend in der Tabelle "abc_mp3_songs" die jeweiligen ID´s.
z.b.
zur playlist_id 1 sind es song_id 161,162,385,1
zur playlist_id 2 sind es song_id 385,161,161,168,179,140

Die Abfrage klappt ja auch
PHP:
$sql_2 =  "SELECT * FROM `abc_mp3_songs` WHERE song_id  IN ( '" . implode($pattern, "','") . "' )";
Die Datensätze sollen aber Sortiert ausgegeben werden.

Die jeweiligen playlist_songs sind bereits Sortiert.
Und in dieser Reihenfolge möchte ich sie auch Ausgeben.



Gruß Thomas Jung
 
Zuletzt bearbeitet:
Ich bin mir nicht sicher ob ich das Problem verstehe, gehe aber davon aus, dass Du "sort" benötigst:
http://php.net/manual/de/function.sort.php
PHP:
$data['playlist_songs'] = '1,40,3,8,2';
sort($data);
//...
Nebenbei: Ich würde kein SELECT * verwenden, sondern immer die gewünschten Spalten direkt abfragen. Das reduziert die Gefahr von falschen Ergebnissen, wenn sich die Spaltenanzahl mal verändert...
 
Nachtrag: Ich glaube jetzt habe ich verstanden.
Du fragst die DB mit einem "IN" ab und bekommst schon ein sortiertes Ergebnis. Das lässt sich bei "IN" nicht verhindern.
Du müsstest für jedes Arrayelement eine Abfrage losschicken, also eine Schleife bauen:
PHP:
foreach ($data as $songid){
 $sql2="SELECT Name,Dauer, Artist,WhatEver FROM 'abc_mp3_songs` WHERE song_id=$song";
$statement_2->execute();
// Ergebnis ausgeben oder in neues Array schreiben
}
 
Habs jetzt erstmal so gemacht.
Vielen Dank an Fragenfrager.

PHP:
$pattern = explode(',', $data['playlist_songs']);
foreach ($pattern as $songid){
$sql2="SELECT * FROM `abc_mp3_songs` WHERE song_id=$songid";
$statement_2 = $pdo->prepare($sql2);
$statement_2->execute();
$data_2 = $statement_2->fetch();
 
Hoi Thomas,

ich würde dir empfehlen das ganze zu normalisieren, sprich die Zuordnung Song -> Playlist in einer eigenen Tabelle zu machen.
Dann könntest du dir auch den extra Select sparen und wärst somit auch performanter.

http://sqlfiddle.com/#!9/7f4177/5

Grüsse,
BK
 
Zurück