php - mySQL - 如何根据指定列是否包含指定值来列出行?

标签 php mysql

我想根据行是否包含值来列出。这意味着,具有指定值的行应该排在第一位。这是表结构;

------------------
|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/

相关文章:

php - 如何避免使用 OOP PHP 打开多个数据库连接

javascript - 如何根据 magento 中的邮政编码检查送货情况

php - 数据库:检查重复错误

javascript - PHP-JS 按钮单击仅获取最后插入的值

php - Shell - 解压带重音的文件夹

php - 从 MySQL 检索 mysqli_real_escape_string

php - Laravel 如何将用户输入与数据库中的数据进行比较

php - select 查询在 php 中无法正确执行

php - 如何优化 PHP 中巨大列表的存储和获取?

php - 使用 PHP、MySQL 和 MD5 创建登录