php – SQL语句我不能包围我的头(大脑太小)
我正在写一个旅行的应用程序.
>用户注册自己 我的桌子 表1:用户 id(key)|性别| pref_m | pref_f 表2:国家选择 id(key)| userid | countryid 那么select语句必须做什么 输入:当前用户的userid 我到目前为止(警告:不多) $sql =“SELECT userid,count(*)AS matches from countryselection”; 这给了我一个想要和我一样旅行到同一个国家的人的名单(以及我们有多少个国家) 最后的说明 我显然是与性别选择部分挣扎. 显然 – 谢谢所有. SELECT us2.id,-- etc. COUNT(cs2.countryid) as countries_in_common FROM countryselection cs1 -- let's gather user countries he want to visit LEFT JOIN -- now let's find other users! countryselection cs2 ON ( cs2.userid <> :userid AND -- which are not him cs2.countryid = cs1.countryid -- and want to visit same countries ) INNER JOIN -- let's grab our user_data users us1 ON ( us1.id = cs1.userid ) INNER JOIN -- and let's grab other user data! users us2 ON ( us2.id = cs2.userid ) WHERE cs1.userid = :userid AND -- finding our user countries he want to visit -- final checks ( (us1.pref_m = 1 AND us2.gender = 'male') -- he is looking for male and second user is male OR (us1.pref_f = 1 AND us2.gender = 'female') -- he is looking for female and second user is female ) AND ( (us2.pref_m = 1 AND us1.gender = 'male') OR (us2.pref_f = 1 AND us1.gender = 'female') ) GROUP BY cs2.userid -- finally group by user_id 最好的事情是没有子查询,你可以很容易地使用这个查询. (改变顺序,分组和使用聚合函数) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |