Anzeige

 SELECT und ORDER BY von einem Array


Thomas_Jung

Erfahrenes Mitglied
#1
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:

Fragenfrager

Erfahrenes Mitglied
#2
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...
 

Fragenfrager

Erfahrenes Mitglied
#3
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
}
 

Thomas_Jung

Erfahrenes Mitglied
#4
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();
 
Anzeige
Anzeige