わかりましたので、MySQL の検索機能を作成していますが、うまくいかないように見えるものに遭遇しました。ユーザーの友達を検索し、スコアの高い友達を返すスクリプトを作成しようとしています。これは私がこれまでに持っているものです:
SELECT id, first_name, last_name, image_id FROM users
WHERE id IN (
SELECT receiver AS friend FROM friends WHERE initiator = :me AND status = :status
UNION
SELECT initiator AS friend FROM friends WHERE receiver = :me AND status = :status
) ORDER BY score AND concat(first_name, ' ', last_name) LIKE '%test query%';
これで、友人をスコアで並べ替えようとするまで、すべてが機能します。友達をスコアで並べ替える方法を練習できる人はいますか? 何か明確にする必要がある場合は、お尋ねください。
次の2つのテーブルがあります。
ユーザー テーブル:
フレンド テーブル:
ここに要求されたように、いくつかのサンプルデータがあります:
例として、3 人のユーザーがいます。
ID: 1, first_name: Michael, last_name: Sample
ID: 2, first_name: John, last_name: Citizen
ID: 3, first_name: Caitlin, last_name: Wired
以下の最初のエントリは、Michael が友達リクエストを開始し、Caitlin (受信者) がそれを受け入れたことを示すことで、Michael と Caitlin を友達にします。(したがって、1 のステータス) 彼らの基本スコアは 10 です。2 番目のエントリは、John が Caitlin とも友達である (Caitlin によって開始された) ことを示していますが、より良いスコアを持っています。
ID: 10000, initiator: 1, receiver: 3, status: 1, score: 10
ID: 10001, initiator: 3, receiver: 2, status: 1, score: 20
ということで今回のサンプルデータの場合。Caitlin が友人を検索しているユーザーである場合、Michael ではなく John が表示されるはずです。