我正在尝试建立一个你可以喜欢别人的照片的项目,而当另一个人也喜欢你的照片时,你就有了匹配。就像Tinder应用程序一样,如果你知道的话。
现在,我这样拍了1张照片:
SELECT id, picture_path, profile_picture, username
FROM tusers
WHERE profile_picture IS NOT NULL
AND settings LIKE '1,%'
AND sex = :sex
AND last_visit BETWEEN CURDATE() - INTERVAL 21 DAY AND CURDATE()
AND dob BETWEEN :dob - INTERVAL 5 YEAR AND :dob2 + INTERVAL 5 YEAR
LIMIT 1
但是,如果您已经喜欢或通过某人的照片,我不想再向您展示。我不知道怎么做这个部分(现在,我已经有了Liked()和alreadyPassed()函数,如果它们返回true,我只做一个标题(“Location”)重定向,但是当你喜欢它时会失败/通过所有照片)。
我有另一张包含以下列的表:id
,user1_id
,user2_id
,liked
,passed
,matched
当您喜欢或传递图片时,会在相应的列中插入1。
user1_id
是您的ID。 user2_id
是另一个人的身份证。
了解上述信息,您会使用什么样的查询(或逻辑)来确保您只展示合适的人(您还没有喜欢或已经通过)?
答案 0 :(得分:1)
假设您有2个表
<强> USR 强>
id username
1 a
2 b
3 c
4 d
<强>喜欢强>
id user1 user2 liked
1 1 4 1
2 1 3 1
假设你的身份证是1,从表喜欢它似乎你喜欢c,d。因为1(a)是你自己的id,你只需要b作为输出,你的查询如下
SELECT *
FROM usr
WHERE id NOT
IN (
SELECT user2
FROM liked
WHERE user1 =1
)
and id!=1
假设1
来自会话
答案 1 :(得分:0)
您可以使用mysql join从一个表中获取基于另一个表的数据
在大写的情况下,您可以使用其他表user1_id连接第一个表id,user2_id将where子句放在喜欢的,传递的,匹配的
上To know more about mysql joins
尝试此操作,因为连接比ersumit $loggedINuser_id='2';//take from session $sql="SELECT tu.id, tu.picture_path, tu.profile_picture, tu.username FROM tusers tu LEFT JOIN secondtable st ON tu.id=st.user2_id WHERE tu.profile_picture IS NOT NULL AND tu.settings LIKE '1,%' AND tu.sex = :sex AND tu.last_visit BETWEEN CURDATE() - INTERVAL 21 DAY AND CURDATE() AND tu.dob BETWEEN :dob - INTERVAL 5 YEAR AND :dob2 + INTERVAL 5 YEAR AND st.user1_id != '".$loggedINuser_id."' LIMIT 1";