SQL сортировать список, но помещать указанный c элемент первым в PHP - PullRequest
0 голосов
/ 27 мая 2020

Я хочу отсортировать список изображений по дате или полученным голосам. Существует также возможность использовать ссылку на открытое изображение, например www.mywebsite.com/images?selected=73723.jpg, чтобы открывать изображение напрямую, в то время как другие условия сортировки все еще применяются.

Выбранное изображение должно быть первым элементом, но после этого оно должно быть снова отсортировано по дате или голосам, как обычно. Вот что у меня есть:

$sortingstring = "image_uploads.UPVOTES DESC"; // <-- order by upvote
$sortingstring = "image_uploads.THMPATH = '".$selectedCode."'"; // <-- selected image

$query = "SELECT * FROM test_users, image_uploads ORDER BY " . $sortingstring;

В этом примере мы можем увидеть код для сортировки голосов за и для фильтрации выбранного изображения. Как я могу объединить обе сортировки по голосам за и сначала отобразить выбранное изображение, кажется, что это не работает, что бы я ни пробовал?

1 Ответ

1 голос
/ 27 мая 2020

Может быть, вы сможете сделать это с помощью функции FIELD, примерно так

ORDER BY FIELD(image_uploads.THMPATH, "your code") DESC, image_uploads.UPVOTES DESC

Вот простой пример

CREATE TABLE `items` (
  `id` int(11) NOT NULL,
  `sort_field` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `items` ADD PRIMARY KEY (`id`);

INSERT INTO `items` (`id`, `sort_field`) VALUES
(1, 1),
(2, 3),
(3, 2);

Запрос

SELECT * FROM items ORDER BY FIELD(items.id, 1) DESC, sort_field DESC

Результат

| id | sort_field |
|----|------------|
|  1 |          1 |
|  2 |          3 |
|  3 |          2 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...