php - 检查字符串是否在 MySQL 字段值中

标签 php mysql sql

我有一个名为“颜色”的数据库字段,用于存储人们最喜欢的颜色。这些是从多选字段中选择的,我将它们全部存储在一个字段中。我使用 PHP 获取一个字段中的所有值:

$lookfor = implode(",", $looking_for);

在包含格式为 red,blue,yellow.... 的值的字段中搜索字符串的最佳方法是什么。

由于用户将使用相同的多选框,我仍然需要访问这种格式的值。 我尝试使用

SELECT * 
  FROM users 
 WHERE users_looking_for LIKE '%$lookfor%'

但如果我的值的存储顺序与搜索顺序不同,这将不起作用。

最佳答案

短期解决方案

使用 FIND_IN_SET function :

$query = sprintf("SELECT u.* 
                    FROM USERS u
                   WHERE FIND_IN_SET('%s', u.users_looking_for) > 0", 
                  mysql_real_escape_string($lookfor));

如果您想搜索多个 lookfor 值,则需要添加额外的 FIND_IN_SET 检查:

WHERE FIND_IN_SET('value1', u.users_looking_for) > 0
  AND FIND_IN_SET('value2', u.users_looking_for) > 0

长期解决方案

不要存储非规范化数据 - 使用多对多表设置:

  • people_id(主键)

颜色

  • color_id(主键)

PEOPLE_COLORS

  • people_id(主键,PEOPLE.people_id 的外键)
  • color_id(主键,COLORS.color_id 的外键)

关于php - 检查字符串是否在 MySQL 字段值中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5929191/

相关文章:

php - 使用 PHP 创建登录页面

mysql - 使用 Doctrine 在 MySQL 数据库上删除多表的语法是什么?

sql - 在 native sql 查询中使用 IN 子句

sql - 如何计算 Postgres 图中所有连接的节点(行)?

php - Laravel Dusk - 调用数组上的成员函数 click()

Php正则表达式在字符串中的第一个全大写字母单词后插入字符

php - Apple Mail 不显示使用 Zend_Mail 发送的 PDF

php - 如果 xampp 在我妈妈的笔记本电脑上运行,它是否会构成安全威胁?

mysql - 我的表不需要主键,我应该使用一个吗?

php - MYSQL查询优化