2015-12-10 3 views
0

У меня есть 2 таблицы, где я хочу получить содержимое таблицы A, но упорядочен из значений таблицы B. Я заказываю по 3 значениям (решаются, reply_date и затем дата). Но моя проблема в том, что она не берет последнюю строку из таблицы B, поэтому результат не тот, который я ожидаю. Это мой запрос.MySQL Заказ по следующей строке другой таблицы

SELECT user_tickets.user_ticket_id, user_tickets.user_id, solved, subject, user_tickets.date AS date, user_tickets_replies.date AS reply_date 
FROM user_tickets 
INNER JOIN user_tickets_replies ON user_tickets.user_ticket_id=user_tickets_replies.user_ticket_id && user_tickets.user_id = user_tickets_replies.user_id 
GROUP BY user_tickets.user_ticket_id 
ORDER BY solved ASC, reply_date DESC, date DESC 
LIMIT 200 

Как получить LAST reply_date из user_tickets_replies?

+0

Какой стол а, б? –

+0

Это MySQL + innoDB – Fredrik

ответ

0

Спасибо за ответы на все вопросы, но я в конечном итоге с помощью PHP вместо этого. Используя этот запрос, чтобы получить все билеты:

SELECT user_ticket_id, user_id, solved, subject, date FROM user_tickets ORDER BY solved ASC, date DESC LIMIT 200 

Затем добавить все данные в массив и сортировка его с этим:

usort($tickets, function($a, $b) { 
    $solved = $a['solved'] - $b['solved']; 
    if ($solved) return $solved; 
    return $a['replied'] > $b['replied']; 
}); 
0

Если я правильно понимаю, у вас есть много билетов, некоторые из которых имеют более одного ответа. Вы хотите отсортировать по дате (последние) reply_date, но обнаружили, что сортировка неправильная.

Существует два способа решить это, в зависимости от того, хотите ли вы, чтобы ваш запрос возвращал все reply_date s для данного билета или только самые последние. Первый вариант был бы изменить ваш ORDER BY:

ORDER BY solved ASC, MAX(user_tickets_replies.date) DESC, user_tickets.date DESC 

Это держит reply_date столбца в его текущем состоянии, но использует только самую большую дату для сортировки целей.

Во-вторых, чтобы изменить ваш SELECT:

SELECT ..., MAX(user_tickets_replies.date) AS reply_date 

Это изменяет reply_date столбец включает одно значение для каждой строки в user_tickets вместо одного значения в строке в user_tickets_replies.

+0

Да, это именно то, что я пытаюсь сделать. И второй вариант сделал трюк. Однако я забыл упомянуть, что я также хочу проверить, был ли последний ответ на билет от создателя билета. У меня есть ** user_tickets.user_id = user_tickets_replies.user_id ** прямо сейчас в ** ON **, поэтому, я думаю, я должен удалить это. Но потом он также сортируется по последнему админ-ответу. И я хочу только сортировать по автоответчику. – Fredrik

0

Датой последнего ответа должно быть максимальное (user_tickets_replies.date) право?

Я хотел бы присоединиться к подбору только тех данных, которые вы хотите отсортировать.

inner join (SELECT user_ticket_id, max(date) as reply_date FROM user_tickets_replies group by 1 order by 2 desc limit 200) sorted_tickets 

, а затем

order by sorted_tickets.reply_date 
Смежные вопросы