我有一个名为“颜色”的数据库字段,用于存储人们最喜欢的颜色。这些是从多选字段中选择的,我将它们全部存储在一个字段中。我使用 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/