第1部分:
软件:Mysql workbench
目标:查找特定用户的第二场比赛
表:Profile_match
列:a_profile_id,b_profile_id,a_profile_match_available_on,b_profile_match_available_on
我的流程:
查找特定用户的所有匹配
查找该用户匹配的所有日期
查找该用户的第二场比赛(ID,日期)
我的查询:
select * from profile_match
where (a_profile_id = '*****' and a_profile_match_available_on is not null)
or (b_profile_id = '*****' and b_profile_match_available_on is not null)
order by a_profile_match_available_on asc limit 1,1;
并发症:
特定用户可以在a_profile_id或b_profile_id下,因此匹配的日期可以是a_profile_match_available_on或b_profile_match_available_on
'order by'无效,因为所需日期可以是a_profile_match_available_on或b_profile_match_available_on
如照片中所示(导出到excel之后),突出显示的个人资料ID是我正在查看的用户,突出显示的日期是用户收到匹配的日期。
期望的结果:
结果1:也许可以创建一个新列,其中包含与该用户匹配的所有人的ID(非突出显示的ID)以及包含所有突出显示日期的另一列
结果2:也许只有4列。 1列是用户的id,1列是用户匹配的id,1列是日期用户匹配,1列是用户匹配匹配的日期
~~~~ 用户Dharmesh Patel的插图 ~~~~:fiddle
第二个问题是此查询仅适用于特定用户。如何扩展这一点,以便为所有用户找到第二场比赛?
第2部分:
目标: 为所有用户找到第二个相似的
当前进度:我可以找到特定用户的第二个相似内容,但我的查询无法为所有用户执行此操作
查询:
select * from profile_match
where (a_profile_id = '*****'
or b_profile_id = '*****')
and (a_profile_match_status = 1 and b_profile_match_status = 1)
order by created_on asc limit 1,1;
信息: a_profile_match_status 和 b_profile_match_status 只取值0或1.当两者都是1时,表示两个用户都喜欢彼此。 Created_on只是用户表示的日期。
谢谢你们!
答案 0 :(得分:1)
对于第1部分,您可以尝试以下查询:
$temp = array();
foreach($data as $k=>$v){
if(is_array($v)){
foreach($v as $key=>$value){
$temp[] = $value;
}
}
}
echo implode(',',$temp);
检查fiddle
<强>更新强>
第1部分
SELECT * FROM profile_match
WHERE (a_profile_id = 1 AND a_profile_match_available_on is not null)
OR (b_profile_id = 1 AND b_profile_match_available_on is not null)
ORDER BY (case when a_profile_id=1
THEN a_profile_match_available_on
ELSE b_profile_match_available_on end
) asc limit 1,1;
第2部分
SELECT * FROM (SELECT P1.* FROM
(SELECT
a_profile_id AS profile_id,
a_profile_match_available_on as profile_match_available_on
FROM profile_match
UNION SELECT
b_profile_id AS profile_id,
b_profile_match_available_on as profile_match_available_on
FROM profile_match) AS P1
) AS P2
GROUP BY P2.profile_id
HAVING P2.profile_id=1 AND
profile_match_available_on > MIN(profile_match_available_on);