mysql:通过自定义搜索查询以查找匹配的朋友
Posted
技术标签:
【中文标题】mysql:通过自定义搜索查询以查找匹配的朋友【英文标题】:mysql: Query to find matches friends by custom search 【发布时间】:2016-05-20 03:28:40 【问题描述】:我想通过示例查找匹配的朋友(城市 | 年龄 | 性别 | 等)
用户选择从表单和html选择中寻找朋友
年龄(22 - 36 岁之间) 性别女 ) 城市 ( a , b , c )
我的桌子喜欢
---------------------------------------------
member_id | member_key | member_value
---------------------------------------------
2 | city | a
---------------------------------------------
2 | gender | female
---------------------------------------------
2 | age | 20
---------------------------------------------
2 | degree | 5
---------------------------------------------
3 | city | x
---------------------------------------------
3 | gender | male
---------------------------------------------
3 | age | 25
---------------------------------------------
3 | degree | 3
---------------------------------------------
4 | city | a
---------------------------------------------
4 | gender | female
---------------------------------------------
4 | age | 26
---------------------------------------------
4 | degree | 3
---------------------------------------------
我希望结果是这样的
----------------------
member_id | match_count
----------------------
4 | 3
----------------------
2 | 2
----------------------
3 | 1
我尝试过这样的查询,但不工作
SELECT `member_id`, `member_key`, SUM(
CASE `member_key`
WHEN ( "age" AND `member_value` BETWEEN 22 AND 36 )
THEN 1
WHEN ( "city" and `member_value` IN ("a","b","c") )
THEN 1
WHEN ( "gender" and `member_value` = "male" )
THEN 1
ELSE 0
END ) AS match_count
FROM members_info
我找到了这个解决方案,它对我来说看起来不错,但性能:(
SELECT member_id,concat_ws(",",member_key) as match_in,count(member_id) as match_count
FROM members_info WHERE
( member_key = "age" AND member_value BETWEEN 22 AND 36) OR
( member_key = "city" AND member_value IN ('a', 'b', 'c') ) OR
( member_key = "gender" AND member_value = "female" )
GROUP BY member_id
【问题讨论】:
【参考方案1】:现在我已经了解您想要完成的工作了。 这是另一种可能更快的方式。我希望它运行顺利:)
SELECT T.member_id, COUNT(*) AS affinity
FROM
(SELECT member_id
FROM members_info
WHERE member_key = 'age' AND member_value BETWEEN 22 AND 36
UNION
SELECT member_id
FROM members_info
WHERE member_key = 'city' AND member_value IN ('a', 'b', 'c')
UNION
SELECT member_id
FROM members_info
WHERE member_key = 'gender' AND member_value = 'female') AS T
GROUP BY T.member_id
【讨论】:
我不得不在引号中添加(年龄 | 城市 | 性别),因为未知列,结果是所有表数都没有使用我们的条件 能否帮忙查询成功 引号表示这些是文字而不是表中的数据,因此没有任何意义。这很简单,看起来对 SQL 的工作方式有更深的误解。很抱歉这么说,但如果你不自己做作业,我不知道如何提供帮助。以上是关于mysql:通过自定义搜索查询以查找匹配的朋友的主要内容,如果未能解决你的问题,请参考以下文章
Mongo 查询以查找任何字段元素与任何查询参数元素匹配的文档
如何将自定义 tableView 搜索工具与 UISearchDisplayController 结合使用?