作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想根据行是否包含值来列出。这意味着,具有指定值的行应该排在第一位。这是表结构;
------------------
|id|name|grades|
------------------
|1|john|,35,,68,,95,|
------------------
|2|Stefan|,54,,66,,29,|
------------------
|3|Lincoln|,88,,100,,28,|
------------------
|4|Hubert|,15,,67,,29,|
------------------
|5|Lucifer|,24,,66,,47,|
------------------
我想首先列出 grades 列中包含 66 的行。到目前为止,我已经尝试过了;
SELECT * FROM students ORDER BY FIELD (grades,'66'), name DESC limit 10
但不幸的是,它没有按预期列出行。正确的做法是什么?
最佳答案
FIELD(grades, '66')
将整个 grades
列与 66
进行比较,它不会将其拆分并查找个人值(value)观。您需要使用 FIND_IN_SET
来确定逗号分隔列表是否包含值。
SELECT * FROM students
ORDER BY FIND_IN_SET('66', grades) = 0, name DESC
LIMIT 10
FIND_IN_SET
返回逗号分隔列表中的位置,如果未找到则返回 0
。因此,添加 = 0
将在找到成绩时生成 0
,如果未找到则生成 1
。
顺便说一句,将逗号分隔的列表放在表格列中通常是糟糕的设计。您应该使用单独的表格,每个值对应一行。
关于php - mySQL - 如何根据指定列是否包含指定值来列出行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599747/
我是一名优秀的程序员,十分优秀!