我有一个名为'colors'的数据库字段,我存储了人们最喜欢的颜色。这些是从多选字段中选择的,我将它们全部存储在一个字段中。我使用PHP来获取一个字段中的所有值:
$lookfor = implode(",", $looking_for);
在包含红色,蓝色,黄色格式值的字段中搜索字符串的最佳方法是什么....
由于用户将使用相同的多选框,我仍然需要以此格式访问值。 我尝试使用
SELECT *
FROM users
WHERE users_looking_for LIKE '%$lookfor%'
但如果我的值的存储顺序与搜索的顺序不同,则无效。
答案 0 :(得分:8)
$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
不存储非规范化数据 - 使用多对多表设置:
答案 1 :(得分:0)
但如果我的值的存储顺序与搜索的顺序不同,则无效。
在存储之前对它们进行排序,并在搜索之前对它们进行排序。
答案 2 :(得分:0)
您应该使用包含两个字段的表user_colors:“user_id”和“color”
搜索值会更容易。
示例:
SELECT * FROM user_colors WHERE color='red' OR color='blue';
答案 3 :(得分:0)
我建议不要使用VARCHAR字段来保存所选颜色的列表,而是转向更多的关系方法,其中列出了每个用户的每种颜色。这样,当您执行查询时,您可以说出它是一组值的选择。