首页 > 解决方案 > SQL排序列表,但将特定元素放在PHP中

问题描述

我想使用收到的日期或赞成票对我的图像列表进行排序。还可以使用打开图像的链接,例如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;

在此示例中,我们可以看到用于投票排序和过滤掉所选图像的代码。如何结合按赞排序并首先显示所选图像,无论我尝试什么似乎都不起作用?

标签: phpmysql

解决方案


也许你可以用 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 |

推荐阅读