2つのテーブルがあります。最初のテーブルは次のようになります。
表:レコード
取り除く| ユーザーID| タイトル| 追加時| 公衆 -------------------------------------------------- ------------------ 1212例2012-06-281 2 217 Test Rec 2012-07-05 1 3212別の2012-07-021 4212非公開2012-05-020 5217成功2012-04-081 6238常に2012-04-181
表:いいね
id | ユーザーID| 取り除く| 好きなとき -------------------------------------------------- -------- 1212 2 2012-07-06 2205 1 2012-06-30 3212 5 2012-07-04
'Records'テーブルでは、'rid'がプライマリインデックスとして設定されています。'Likes'テーブルでは、idがプライマリインデックスとして設定されています。
私はPHPを使用しています。PHPは、参照として使用する値をMySQLに提供します。次のことを行う単一のMySQLクエリが必要です。
擬似コード:
$userid = 212;
$SQL = 'SELECT DISTINCT records.*
FROM records,likes
WHERE (records.userid = ' . $userid .
' AND records.public = 1)
OR (records.id = likes.rid AND likes.userid = ' . $userid .
' AND records.public = 1)
ORDER BY likes.whenliked DESC, records.whenadded DESC
LIMIT 50;';
上で提供した$SQLクエリを見てください。それは私が望んでいたクエリを開発するための私の試みですが、それは私が探していたものを達成しませんでした。それはかなり近くに来ました、しかしそれはまだ間違った順序でした。クエリは、最初に自分でできる限り最善を尽くして開発され、次にStackFlowやGoogleの他の場所で解決策を検索して見つけたものに基づいて作成されました。
これらは私がそれを注文しようとしている条件です:
- 選択するすべてのレコードはパブリックである必要があります(records.public = 1)。
- レコードがユーザー(この例では212)に属している場合は、records.whenaddedでレコードを並べ替えます。
- レコードがユーザーのものではないが、ユーザーが気に入ったレコードである場合は、likes.whenlikedでレコードを並べ替えます。
- 日付は新しいものから古いものの順に並べられます。
返されるクエリの最終結果は次のようになります(returnedデータにlikedがない場合は、参照用にあるため、順序がわかります)。
取り除く| ユーザーID| タイトル| 追加時| パブリック| 好きなとき{含まない} -------------------------------------------------- ---------------------------------- 2 217 Test Rec 2012-07-05 1 2012-07-06 3212別の2012-07-021 5217成功2012-04-0812012-06-30 1212例2012-06-281
それが理にかなっていることを願っています。お気軽にご質問ください。できる限りのことを明確にします。
あなたの時間、あなたの考慮、そしてこれを読んでくれてありがとう。返答がない、または解決策が見つからない場合でも、あなたの時間は非常にありがたいです!:)