sql заказ с объединением - PullRequest
1 голос
/ 22 февраля 2012

у меня есть этот sql запрос:

SELECT b.topbid, b.topdate, a.* 
FROM auction_items a 
LEFT JOIN 
   (SELECT itemID, MAX(bid) as topbid, 
   MAX(date) as topdate FROM auction_bids GROUP BY itemID ) b 
ON a.id = b.itemID 
ORDER BY b.topdate DESC, a.date DESC LIMIT 20

Это не порядок, как мне бы хотелось.Я хочу заказать его, объединив b.topdate и a.date.

Что не так?

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Вы имеете в виду порядок, объединяя два значения? если да, попробуйте следующее:

SELECT b.topbid, b.topdate, a.* 
FROM auction_items a 
LEFT JOIN 
   (SELECT itemID, MAX(bid) as topbid, 
   MAX(date) as topdate FROM auction_bids GROUP BY itemID ) b 
ON a.id = b.itemID 
ORDER BY b.topdate || a.date DESC LIMIT 20

Я не уверен, в какой СУБД вы находитесь, но объединение Oracle - это каналы ||

РЕДАКТИРОВАТЬ: при использовании MySQL использовать функцию CONCAT:

SELECT b.topbid, b.topdate, a.* 
    FROM auction_items a 
    LEFT JOIN 
       (SELECT itemID, MAX(bid) as topbid, 
       MAX(date) as topdate FROM auction_bids GROUP BY itemID ) b 
    ON a.id = b.itemID 
    ORDER BY CONCAT(b.topdate,a.date) DESC LIMIT 20
0 голосов
/ 22 февраля 2012

Попробуйте выбрать одно или другое с помощью оператора CASE, а затем упорядочить по этому значению:

SELECT b.topbid, b.topdate, a.* , CASE WHEN b.topdate > a.date then b.topdate ELSE a.date     END AS oDate
FROM auction_items a 
LEFT JOIN 
   (SELECT itemID, MAX(bid) as topbid, 
   MAX(date) as topdate FROM auction_bids GROUP BY itemID ) b 
ON a.id = b.itemID 
ORDER BY oDate DESC LIMIT 20
0 голосов
/ 22 февраля 2012

Вы не можете иметь порядок как по b.topdate, так и по a.date, потому что они оба могут иметь значение. Если вы можете сказать, что, когда они оба имеют значение, которое вы должны использовать одно поверх другого (например, topdate over date), вы можете сделать это следующим образом:

SELECT b.topbid, b.topdate, a.* 
FROM auction_items a 
LEFT JOIN 
   (SELECT itemID, MAX(bid) as topbid, 
   MAX(date) as topdate FROM auction_bids GROUP BY itemID ) b 
ON a.id = b.itemID 
ORDER BY COALESCE(b.topdate, a.date) DESC LIMIT 20

Обратите внимание на порядок по. Если все наоборот, сделайте это COALESCE (a.date, b.topdate)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...