根据table2从table1中选择记录

时间:2013-11-15 08:54:19

标签: php mysql sql

我正在尝试建立一个你可以喜欢别人的照片的项目,而当另一个人也喜欢你的照片时,你就有了匹配。就像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”)重定向,但是当你喜欢它时会失败/通过所有照片)。

我有另一张包含以下列的表:iduser1_iduser2_idlikedpassedmatched

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

user1_id是您的ID。 user2_id是另一个人的身份证。

了解上述信息,您会使用什么样的查询(或逻辑)来确保您只展示合适的人(您还没有喜欢或已经通过)?

2 个答案:

答案 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";

建议的内部查询要好得多