2014-02-06 45 views
0

这是我的查询:如何“排序”超过列?

SELECT count(oi.id) imgCnt, o.*, 
IF(pricet=2,c.currency_value*o.attributes_36*o.price, 
c.currency_value*o.price) AS pprice, od.title, oi.image, 
MIN(oi.id), (c.currency_value * o.price) AS fprice, 
ag.agent_name, DATE_FORMAT(o.date_added, '%d-%m-%Y') as dadded 
FROM i_offers_12 o 
LEFT JOIN i_agents ag ON o.agents_id = ag.id 
LEFT JOIN i_currencies c ON o.currencies_id = c.id 
LEFT JOIN i_offers_details od ON (o.id = od.offers_id AND od.languages_id = 1) 
LEFT JOIN i_offers_images oi ON (oi.offers_id = o.id AND oi.o_id = '12') 
WHERE (o.offer_status='active' OR o.offer_status='sold') 
AND actions_id = '1' 
AND c.id = o.currencies_id 
AND o.counties_id = '2' 
AND o.cities_id = '3' 
GROUP BY o.id 
ORDER BY dadded 
DESC 

我想以后排序dadded(这是日期类型)和offer_status(这是枚举类型)。 我想首先显示offer_status ='active'并按dadded排序的所有元素,之后所有具有offer_status ='出售'的元素并按dadded排序。我怎样才能做到这一点? THX

回答

1

要排序上必须是select语句的一部分的字段:

SELECT count(oi.id) imgCnt, o.*, 
    IF(pricet=2,c.currency_value*o.attributes_36*o.price, 
    c.currency_value*o.price) AS pprice, od.title, oi.image, 
    MIN(oi.id), (c.currency_value * o.price) AS fprice, 
    ag.agent_name, DATE_FORMAT(o.date_added, '%d-%m-%Y') as dadded , 
    offer_status 
    FROM i_offers_12 o 
    LEFT JOIN i_agents ag ON o.agents_id = ag.id 
    LEFT JOIN i_currencies c ON o.currencies_id = c.id 
    LEFT JOIN i_offers_details od ON (o.id = od.offers_id AND od.languages_id = 1) 
    LEFT JOIN i_offers_images oi ON (oi.offers_id = o.id AND oi.o_id = '12') 
    WHERE (o.offer_status='active' OR o.offer_status='sold') 
    AND actions_id = '1' 
    AND c.id = o.currencies_id 
    AND o.counties_id = '2' 
    AND o.cities_id = '3' 
    AND o.offer_status='active' 
    GROUP BY o.id 
    ORDER BY offer_status, dadded 
    DESC 

请注意,您通常应按所有未汇总字段进行分组(o。*, IF(pricet = 2,c.currency_value * o.attributes_36 * o.price, c.currency_value * o.price)AS pprice,od.title,oi.image,(c.currency_value * o.price)AS fprice, ag.agent_name,DATE_FORMAT(o.date_added, '%D-%间%Y')作为dadded, offer_status)

MySQL是没有强制执行,但其他数据库,如Oracle一样。

0

我相信你可以写与

ORDER BY offer_status, dadded 
0

的SQL您可以用逗号,像

ORDER BY supplier_city DESC, supplier_state ASC;