I have two tables. The first table looks like this:
Table: Entries
rid | user id | title | whenadded | public
-------------------------------------------------- ------------------
1 212 Example 2012-06-28 1
2,217 Test Rec 2012-07-05 1
3 212 Another 2012-07-02 1
4,212 Unlisted 2012-05-02 0
5,217 Success 2012-04-08 1
6,238 Always 2012-04-18 1
Table: Likes
id | user id | rid | whenliked
-------------------------------------------------- ----
1 212 2 2012-07-06
2 205 1 2012-06-30
3 212 5 2012-07-04
In the Records table, rid is set as the primary index. In the "Likes" table, id is set as the primary index.
I am using PHP. PHP will provide the MySQL value for use as a reference. I would like to have one MySQL query that will do the following:
Pseudocode:
$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;';
Take a look at the SQL SQL query I just presented above. This is my attempt to develop the query that I wanted, but it did not achieve what I was looking for; it was pretty damn close, but it was still misordered. The request was designed as best as possible, and I based on what I found looking for a solution on StackFlow and elsewhere on Google.
These are the conditions I'm trying to order:
- All selected entries must be publicly available (records.public = 1).
- If the entry belongs to the user (in this example, 212), then sort the entries by .whenadded entries.
- If the entry does not belong to the user, but it is the entry that the user liked, then order entries like.whenliked.
- Dates will be sorted from newest to oldest.
The end result from the returned query will look like this (remember that when the value is not in the returned data, it is just available for reference, so you see how it is ordered):
rid | user id | title | whenadded | public | whenliked {not incl}
-------------------------------------------------- ----------------------------------
2,217 Test Rec 2012-07-05 1 2012-07-06
3 212 Another 2012-07-02 1
5,217 Success 2012-04-08 1 2012-06-30
1 212 Example 2012-06-28 1
Hope this makes sense. Feel free to ask questions, I will clarify what I can.
Thank you in advance for your time, your attention and for this. Even if there is no answer or no solution is found, your time is still greatly appreciated! :)