【问题标题】:mysql: Query to find matches friends by custom searchmysql:通过自定义搜索查询以查找匹配的朋友
【发布时间】: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

【问题讨论】:

    标签: php jquery mysql mysqli


    【解决方案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 的工作方式有更深的误解。很抱歉这么说,但如果你不自己做作业,我不知道如何提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2018-07-16
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多