1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

SELECT und ORDER BY von einem Array

Dieses Thema im Forum "PHP" wurde erstellt von Thomas_Jung, 16. April 2018.

  1. Thomas_Jung

    Thomas_Jung Erfahrenes Mitglied

    Hallo,
    ich lese die Daten mit folgendem Code aus.


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

    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:
    1. $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: 16. April 2018
  2. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    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:
    1. $data['playlist_songs'] = '1,40,3,8,2';
    2. sort($data);
    3. //...
    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...
     
  3. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    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:
    1. foreach ($data as $songid){
    2.  $sql2="SELECT Name,Dauer, Artist,WhatEver FROM 'abc_mp3_songs` WHERE song_id=$song";
    3. $statement_2->execute();
    4. // Ergebnis ausgeben oder in neues Array schreiben
    5. }
     
  4. Thomas_Jung

    Thomas_Jung Erfahrenes Mitglied

    Habs jetzt erstmal so gemacht.
    Vielen Dank an Fragenfrager.

    PHP:
    1. $pattern = explode(',', $data['playlist_songs']);
    2. foreach ($pattern as $songid){
    3. $sql2="SELECT * FROM `abc_mp3_songs` WHERE song_id=$songid";
    4. $statement_2 = $pdo->prepare($sql2);
    5. $statement_2->execute();
    6. $data_2 = $statement_2->fetch();
     
  5. Bratkartoffel

    Bratkartoffel gebratene Kartoffel Premium-User

    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
     
  6. Thomas_Jung

    Thomas_Jung Erfahrenes Mitglied

    Vielen Dank für die Info Bratkartoffel.
     
Die Seite wird geladen...