Вытащить записи из базы + поднять наверх с известными id

Gas

может по одной?
desc

или вопрос более глобальный - не почему в обратном порядке, а как вообще это всё вместе работает?
 

asterisk

Новичок
вернее мне не совсем понятно почему без указания порядка сортировки, т.е. просто "ORDER BY find_in_set(Subdivision_ID, "86,87,88")" сортировка с "пре выборкой" уже не срабатывает.
Возможно ли вообще решить поставленную задачу не прибегая к использованию функций вроде реверс массива?
 

Духовность™

Продвинутый новичок
получилось. позже разберусь обязательно как это работает. всем большое спасибо!

В итоге (дополнение к большому моему вышеприведенному запросу):

PHP:
ORDER BY find_in_set(id_article, "'.implode(',', $ids).'") DESC, id_article DESC
 

Gas

может по одной?
asterisk
просто "ORDER BY find_in_set(Subdivision_ID, "86,87,88")" сортировка с "пре выборкой" уже не срабатывает.
Почему не срабатывает, срабатывает, будет порядок 86,87,88.
Просто реверс нужен в конкретном данном случае, потому что имеются записи с article_id которых нет в списке 33,29,26. Для них результатом функции find_in_set будет 0 и они станут первыми, а нужно чтоб они были после тех, что заданы в ней, вот и приходится так делать.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
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-ке нет возможности.
 

Gas

может по одной?
Mr_Max
меня честно говоря смущает что тут стоит union, а не union all. Когда mysql мерджит результаты обоих запросов чёрт знает в каком порядке получается результат.

Ну и как по мне, проще переворачивать порядок внутри find_in_set на стороне клиента (php) при формировании запроса, чем делать union.

Было
Код:
(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);
стало
Код:
SELECT id FROM t5 ORDER BY FIND_IN_SET(id, [b]'2,3,7,5'[/b]) DESC, id ASC/DESC
хотя может я не до конца понял суть.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
смущает что тут стоит union, а не union all
Ну если ТС уже выбрал какие-то новости то во 2-м результате они вряд-ли нужны.

-~{}~ 19.12.07 15:33:

SELECT id FROM t5 ORDER BY FIND_IN_SET(id, '2,3,7,5') DESC, id ASC/DESC
совершенсьвовать можно до бесконечности ;)
если в find_in_set asc нужно будет
переворачивать
 
Сверху