8792 sujets

Développement web côté serveur, CMS

Salut tout le monde !
J'ai une question pour les gourous :
J'ai 2 tableaux php : $id avec les id des enregistrements, et $tri avec les positions.
Par exemple :

$id = array(54,3,454);
$pos = array(3,1,2);

je fais ma recherche mysql :

$sql = "SELECT * FROM maTable WHERE id IN(" . implode(",",$id) . ")";

Et je voudrais donc que ce résultat soit trié selon le tableau $pos.
Si ce n'est pas possible directement en mysql, je voudrais trouver la solution la plus simple de le faire en PHP.
Pour le moment, le seul moyen que je vois, c'est de passer boucler sur mon résultat mysql pour créer des tableaux avec toutes les colonnes, puis de faire un array_multisort, mais je trouve ça un peu lourd. Y'aurait pas un moyen plus élégant ?

Merci !
Salut,

Tu peux le faire selon les positions à conditions que tu n'utilises pas * cmme sélecteur mais en utilisant les champs.

Soit : $sql = "SELECT Champ1, Champ2, Champ3, FROM table WHERE ID IN(". implode(',', $id).") ORDER BY ".implode(', ', $pos).";"

Donc selon ton tableau, les résultats seront trié par : Champ3, Champ1 puis Champ2.

Après à toi de voir pour les DESC ou ASC (par défaut c'est du ASC).

A+
ah non, tu m'as pas compris. Je veux pas que le tri se fasse sur le contenu d'un champ. Je veux que le trie se fasse comme s'il y avait un champ pos dans ma table.
Et donc en reprenant mon exemple :
$id = array(54,3,454);
$pos = array(3,1,2);
le résultat serait que l'enregistrement ayant l'id 54 serait en troisième position, le 454 en deuxième et le 3 en premier.
Salut,

tu vas devoir jongler avec le tableau : Les index, reprendront les valeurs te permettant de faire la sélection (3,1,2) et les valeurs seront des objets (mysql_fetch_object) ou des tableaux (mysql_fetch_array). Le parcours des résultats suffit à alimenter le tableau.

Tu as fais la moitié du chemin Smiley smile