根据表 2 从表 1 中选择记录


Select records from table1 depending on table2

我正在尝试构建一个项目,您可以在其中喜欢其他人的照片,当其他人也喜欢您的照片时,您就有了匹配。如果你知道的话,就像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()和已经Passed()函数,如果它们返回true,我只做一个标题("位置")重定向,但是当你喜欢/传递所有照片时,这将失败)。

我有另一个包含这些列的表:iduser1_iduser2_idlikedpassedmatched

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

user1_id是您的 ID。 user2_id是对方的身份证。

了解了上述信息后,您将使用哪种查询(或逻辑)来确保只显示正确的人(您尚未喜欢或尚未通过)?

假设你有 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将来自会话

您可以使用 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";