MySQL Две базы данных, порядок по одному столбцу в одном случае, порядок по другому столбцу в другом случае

У меня есть две таблицы. Первая таблица выглядит так:

Таблица :Записи

    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

Таблица :Нравится

    id  |   user id   |     rid     |    whenliked
------------------------------------------------------
    1        212            2            2012-07-06
    2        205            1            2012-06-30
    3        212            5            2012-07-04

В таблице «Записи» «рид» установлен в качестве основного индекса. В таблице «Нравится» 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.

Это условия, по которым я пытаюсь заказать:

  1. Все выбранные записи должны быть общедоступными (records.public = 1 ).
  2. Если запись принадлежит пользователю (в этом примере, 212 ), то упорядочиваем записи по records.whenadded.
  3. Если запись не принадлежит пользователю, но она понравилась пользователю, то упорядочить записи по лайкам.когда понравились.
  4. Даты будут упорядочены от самой новой к самой старой.

Конечный результат возвращаемого запроса будет выглядеть следующим образом (имейте в виду, что whenliked НЕ находится в возвращаемых данных, он просто для справки, чтобы вы видели, как он упорядочен):

    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

Надеюсь, это имеет смысл. Не стесняйтесь задавать вопросы, я объясню, насколько смогу.

Заранее спасибо за ваше время, внимание и за то, что прочитали это. Даже если ответа нет или решение не найдено, ваше время все равно очень ценится!:)

8
задан Don Cullen 6 July 2012 в 06:48
поделиться