1

このトピックを作成する前に、コミュニティ全体を調査しましたが、私がやろうとしていることに近いものは見つかりませんでした。私は、学術目的のみの 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';


これは、このリンクのポルトガル語フォーラムの別のトピックで提起された質問に似ています

特定のユーザー X から、今日または現在の日付から 7 日以内に誕生日を迎えるすべての友人を取得する必要があります。2つの列があり、X が要求しているユーザーの場合、要求されたユーザーに参加する必要があります。それ以外の場合は X が要求されている場合、要求者に参加します。

つまり、今日または今後 7 日以内に誕生日を迎える「ユーザー ID 50」の友人をすべて取得します。


この問題を解決し、パフォーマンスを向上させるクエリを実行する方法がわからないため、誰かが私を助けることができれば。疑問はよくあることであり、学術的な目的であるため、多くの人に役立つと思います。ありがとうございました。

4

3 に答える 3

0
SELECT id, name, DATE_FORMAT(birthdate, '%d/%m/%Y') AS dtbirth,
TIMESTAMPDIFF(YEAR, birthdate, NOW()) AS age
FROM users 
WHERE birthdate between  CURDATE() and  DATE_ADD(CURDATE(), INTERVAL 7 DAY))
于 2018-06-21T04:07:47.527 に答える