MYSQLI 从表中获取结果:显示所有用户(但首先显示豪华和高级用户)? [复制]

Posted

技术标签:

【中文标题】MYSQLI 从表中获取结果:显示所有用户(但首先显示豪华和高级用户)? [复制]【英文标题】:MYSQLI Fetch results from table: Display all users (but display deluxe and premium users first)? [duplicate] 【发布时间】:2019-08-22 01:14:08 【问题描述】:

我的数据库中有一个名为 user_data 的表。 我想从此表中选择所有数据行,其中用户的 advert_status 为“活动”。

但是,该表中还有一个名为 advert_type 的列。这个的枚举值是:

Deluxe, Premium and Basic. 

我想执行一个 mysqlI 查询并在表中列出他们的 advert_status 处于活动状态的所有用户。但我想按顺序列出豪华用户,然后是高级用户和基本用户。

期望的结果:

Deluxe User 1
Deluxe User 2
Deluxe User 3
Premium User 1
Premium User 2
Basic User 1
Basic User 2

这是我尝试过的。

$variable = $_GET['r'];
             if($variable == '0') 
             $query = $conn->query("SELECT * FROM user_data WHERE advert_status = 'Active' ORDER BY advert_type");

这不起作用。请问有人可以告诉我如何达到我想要的结果吗?提前致谢。

【问题讨论】:

向我们展示一些示例数据,以便我们查看结构。 ORDER BY 子句可能正确排序,但您对排序方式的期望可能会被误解。这些值是数字吗,0 代表豪华?它们是字母数字,值deluxe 还是类似的? @D.N.正如问题所述,有一个名为 advert_type 的列,其枚举值设置为“豪华”、“高级”和“基本”。这是表格列的结构/布局。 所以对于我标记的重复项中您想要的结果,ORDER BY FIELD(advert_type, "Deluxe", "Premium", "Basic") 【参考方案1】:

您可以使用order by case when 来满足您的要求:

 SELECT * FROM user_data 
 WHERE advert_status = 'Active' 
 ORDER BY
    Case when advert_type = "Deluxe" then 1
         when advert_type = "Premium" then 2
         else 3 end asc

【讨论】:

对于另一种比较语法,您可以使用CASE advert_type WHEN "Deluxe" THEN 1 WHEN "Premium" THEN 2 ELSE 3 END ASC 但是使用 CASE WHEN 进行排序通常会很慢。

以上是关于MYSQLI 从表中获取结果:显示所有用户(但首先显示豪华和高级用户)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL XDev API Javascript 从表中全选

从表中获取特定用户的所有行以及总和

在无限滚动上使用 AJAX 和 PHP 从表中获取结果?

使用 MySQL 从表中获取特定列表,然后获取剩余的列表

PDO 从表中提取一列到一维数组中

在 ajax 表单提交上更新 mysqli 查询