ORDER BY find_in_set(id_article, "'.implode(',', $ids).'") ASC, id_article DESC
ORDER BY find_in_set(id_article, "'.implode(',', $ids).'") DESC, id_article ASC
Тоже работают?
-~{}~ 19.12.07 14:53:
Я по другому когда-то мучался.
Возможно из-за того, что делал под 4-ку.
А было у меня вот так.
mysql> SELECT VERSION();
+---------------------+
| VERSION() |
+---------------------+
| 4.1.22-community-nt |
+---------------------+
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE t5;
CREATE TABLE `t5` (
`id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1
mysql> SELECT COUNT(id) FROM t5;
+-----------+
| COUNT(id) |
+-----------+
| 14 |
+-----------+
1 row in set (0.00 sec)
Должен работать запрос вида
(SELECT id, FIND_IN_SET(id, '5,7,3,2') as fis FROM t5 WHERE id IN (5,7,3,2)) UNION (SELECT
id, 'x' as fis FROM t5) ORDER BY fis, id DESC;
+----+-----+
| id | fis |
+----+-----+
| 5 | 1 |
| 7 | 2 |
| 3 | 3 |
| 2 | 4 |
| 14 | x |
| 13 | x |
| 12 | x |
| 11 | x |
| 10 | x |
| 9 | x |
| 8 | x |
| 7 | x |
| 6 | x |
| 5 | x |
| 4 | x |
| 3 | x |
| 2 | x |
| 1 | x |
+----+-----+
18 rows in set (0.00 sec)
Запросы вида не работают.
По крайней мере на 4-ке.
mysql> (SELECT id FROM t5 WHERE id IN (5,7,3,2) ORDER BY FIND_IN_SET(id, '5,7,3,
2') ASC) UNION (SELECT id FROM t5 ORDER BY id DESC);
+----+
| id |
+----+
| 2 |
| 3 |
| 5 |
| 7 |
| 1 |
| 4 |
| 6 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
+----+
14 rows in set (0.00 sec)
mysql> (SELECT id FROM t5 WHERE id IN (5,7,3,2) ORDER BY FIND_IN_SET(id, '5,7,3,
2') DESC) UNION (SELECT id FROM t5 ORDER BY id ASC);
+----+
| id |
+----+
| 2 |
| 3 |
| 5 |
| 7 |
| 1 |
| 4 |
| 6 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
+----+
14 rows in set (0.02 sec)
-~{}~ 19.12.07 15:06:
К сожалению протестировать сейчас на 5-ке нет возможности.