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 从表中获取结果:显示所有用户(但首先显示豪华和高级用户)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章