在创建这个主题之前,我对整个社区进行了调查,但没有发现任何接近我所要做的事情。我正在开发一个小型社交网络,这是一个php项目,仅供学术用途。
我的数据库中有以下表格:

Table Name: users
Columns:
   id => INT (Primary Key - AutoIncrement)
   name => VARCHAR(200)
   birthdate => DATE
   login => VARCHAR(60)
   password => VARCHAR(60)

Table Name: friends
Columns:
   id => INT (Primary Key - AutoIncrement)
   idRequester => INT (Foreign Key - users>>id)
   requestDate => DATE
   idRequested => INT (Foreign Key - users>>id)
   confirmationDate => DATE
   situation => CHAR(1) (A=Accepted | P=Waiting | R=Rejected)

通过下面的查询,我可以得到一天中所有的生日(不考虑友谊)。
SELECT id, name, DATE_FORMAT(birthdate, '%d/%m/%Y') AS dtbirth,
TIMESTAMPDIFF(YEAR, birthdate, NOW()) AS age
FROM users WHERE birthdate LIKE '%-06-21';

这类似于葡萄牙论坛的另一个主题中提出的问题,在这个链接中:Here
我需要从一个特定的用户x获得所有今天或给定当前日期后7天内有生日的朋友。我不知道如何加入表用户和朋友,因为我们有两列,如果x是请求用户,则我需要加入请求的用户,否则x被请求,则我加入请求者。
也就是说,让所有今天或未来7天内过生日的“用户ID 50”好友。
如果有人能帮助我,因为我不知道如何执行一个查询来解决这个问题并提高性能。我相信这对很多人都有帮助,因为怀疑是经常发生的,而且是出于学术目的。谢谢您。

最佳答案

嗨,根据我的理解,你要求所有在今天到下周为某个用户ID过生日的朋友,你也不知道如何拉所有的朋友,因为有时X个人是请求友谊的人,有时X是请求友谊的人。
我在下面写了一个问题,希望能有所帮助。

select ur.*, TIMESTAMPDIFF(YEAR, birthdate, NOW()) AS age
 from users ur
 inner join
 (
    -- getting all the friends who are accepted and the user was requested
   (
      select f.idRequester as friends_id
      from users u
      inner join friends f
      on (u.id=f.idRequested)
      where u.id=103 and situation = 'A'
   )
   union
   (
     -- getting all the friends who are accepted and the user was requester

     select f.idRequested as friends_id
     from users u
     inner join friends f
     on (u.id=f.idRequester)
     where u.id=103 and situation = 'A'
    )
  ) temp
    on(ur.id=temp.friends_id)
    /*
       this part compares if the day of birth lies
       between today or next 7 days.
    */
     WHERE DATE(CONCAT_WS('-', YEAR(curdate()), MONTH(birthdate),
           DAY(birthdate))) BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL 7 DAY);

注意:我已经对用户id进行了硬编码,为了使其具有动态性,您可以使用带参数的存储过程并用它替换硬编码部分。

关于mysql - 如何获得今天或 future 7天(一周)有生日的 friend ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50960127/

10-13 04:47