In MySQL sorteren op IN()

Door 13 september 2013Tips & Trucs

Recent had ik in PHP een array opgebouwd, aan de hand van deze array wilde ik gegevens ophalen uit de database, máár wél in de volgorde van mijn array. Een voorbeeld array:

$array = [5,1,3,2,4];

Om uit een database gegevens te halen waarbij de gegevens in de array gelijk zijn aan het ID heb ik de IN functie gebruikt met een implode:

$array = [5,1,3,2,4];
$query = 'SELECT * FROM tabel WHERE id IN('.implode(',',$array).')';

Maar de volgorde wordt op deze manier niet behouden, mocht ik dus door de resultaten “loopen” dan krijg ik niet eerst resultaat 5 gevolgd door 1, enzovoorts. Om dit voor elkaar te krijgen heb ik de FIELD functie gebruikt met als resultaat:

$array = [5,1,3,2,4];
$query = 'SELECT * FROM tabel WHERE id IN('.implode(',',$array).') ORDER BY FIELD (id,'.implode(',',$array).')';

Op deze manier blijft de volgorde bestaan en krijg ik dus wél 5 als eerste resultaat, gevolgd door 1, enzovoorts.

MySQL heeft meer functies dan dat er vaak gedacht wordt, kijk bijvoorbeeld eens naar de documentatie over functies.