2015-05-25 53 views
0

我嘗試根據其中一個表字段對結果ASCDESC進行排序。 這裏是我的查詢:mysql查詢 - ORDER BY病例情況

SELECT 
    tenders.id                     AS tender_id, 
    tenders.title                    AS tender_title, 
    tenders.descr                    AS tender_desc, 
    tenders.init_date                   AS init_date, 
    tenders.init_time                   AS init_time, 
    tenders.end_date                   AS end_date, 
    tenders.end_time                   AS end_time, 
    tenders.city_sing                   AS city_sing, 
    tenders.tender_header                  AS tender_header, 
    tenders.tender_win                   AS tender_win, 
    tender_items.id                    AS item_id, 
    tender_items.tender_id                  AS item_tender_id, 
    tender_items.item_name                  AS item_name, 
    tender_items.item_quan                  AS item_quan, 
    tenders_items_bids.tender_id                AS bid_tender_id, 
    tenders_items_bids.id                  AS bid_id, 
    tenders_items_bids.user_id                 AS bidder_id, 
    tenders_items_bids.single_price                AS single_price, 
    tenders_items_bids.single_vat                AS single_vat, 
    tenders_items_bids.supply                 AS supply, 
    tenders_items_bids.timeout                 AS timeout, 
    tenders_items_bids.on_date                 AS on_date, 
    tenders_items_bids.on_time                 AS on_time, 
    clients.id                     AS client_id, 
    clients.name                    AS client_name, 
    Sum((tenders_items_bids.single_vat+tenders_items_bids.single_price)*tender_items.item_quan) AS sub_total, 
    Sum(tenders_items_bids.single_price*tender_items.item_quan)         AS sub_total_no_vat, 
    cities.id                     AS ct_id, 
    cities.name                     AS city_name, 
    cities.logo                     AS city_logo set @orderBy = tender_win 
    FROM 
    tenders 
    JOIN tender_items 
    ON tenders.id = tender_items.tender_id 
    JOIN cities 
    ON cities.id = tenders.city_sing 
    JOIN tenders_items_bids 
    ON tenders_items_bids.tender_id = tenders.id 
    AND tenders_items_bids.item_id = tender_items.id 
    JOIN clients 
    ON clients.id = tenders_items_bids.user_id 
    WHERE 
    tenders.id = $tender_id 
    GROUP BY 
    tenders_items_bids.user_id 
    ORDER BY 
      CASE 
        WHEN tender_win = '1' THEN sub_total ASC 
        ELSE sub_total DESC 
      end 

最後一部分纔是最重要的,在ORDER BY。無論如何,我總是收到失敗的消息。任何人都可以幫助我這個查詢?

+2

你不能讓「條件SQL」就像你一樣。 'order by'需要一個字段名,而你的情況是「返回」'foo asc'或'foo desc'。 –

+0

下一次,請將您的查詢格式化爲人類可讀的格式。 – mathielo

回答

0

您需要在order by兩個單獨的語句來做到這一點:

ORDER BY (CASE WHEN tender_win = '1' THEN sub_total END) ASC, 
     (CASE WHEN tender_win = '1' THEN NULL ELSE sub_total END) DESC 

或者,如果sub_total是一個數字,您可以使用否定招:

ORDER BY (CASE WHEN tender_win = '1' THEN sub_total ELSE - sub_total END) ASC 
+0

感謝您的回答,它看起來像它的工作,但現在我得到另一個錯誤:不支持引用'sub_total'(引用組功能) –