1

我正在尝试构建一个项目,您可以在其中喜欢其他人的照片,并且当其他人也喜欢您的照片时,您就有了匹配。如果您知道,请喜欢 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

但是,如果你已经喜欢或通过了某人的照片,我不想再给你看。我还不确定如何做这部分(现在,我已经喜欢()和已经通过()函数,如果它们返回 true,我只会做一个标题(“位置”)重定向,但是当你喜欢的时候会失败/通过了所有照片)。

我有另一个包含这些列的表:id, user1_id, user2_id, liked, passed,matched

当您喜欢或传递图片时,在相应的列中插入一个 1。

user1_id是你的身份证。user2_id是对方的身份证。

知道了上述信息,你会使用什么样的查询(或逻辑)来确保只显示正确的人(你还没有喜欢或通过)?

4

2 回答 2

1

假设你有 2 张桌子

用户

id  username
1   a
2   b
3   c
4   d

喜欢

id  user1   user2   liked
1    1       4          1
2    1       3          1

假设您的 id 是 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将来自会话

于 2013-11-15T09:24:21.007 回答
0

您可以使用 mysql join 根据另一个表从一个表中获取数据

在大写情况下,您可以将第一个表 id 与其他表 user1_id、user2_id 连接到喜欢、通过、匹配的 where 子句上

要了解有关 mysql 连接的更多信息

试试这个,因为 join 比 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";

于 2013-11-15T09:01:07.087 回答