2012-01-25 57 views
0

我正在嘗試進行查詢,可以選擇具有相同字段名稱的同一個表的前2個和後3個結果。
我儘可能地嘗試了UNION ALL使用限制子句以及union all或選擇top 2和last 3結果

我正在使用MYSQL和PHP。

從OP的評論:

select * 
    from tbl_product asc 
union 
select * 
    from tbl_product desc 
    order by pd_price limit 2 
+2

可以粘貼你的查詢嗎? –

+0

SELECT * FROM tbl_product ASC 工會 SELECT * FROM tbl_product遞減 爲了通過pd_price限制2. –

回答

0

基本上你的問題集中在如何從邏輯總結兩個數據集源自同一實體,通過相同的標準有序的到來(價格,正如你所提到)。

第一個數據集必須考慮前兩個記錄,而第二個數據集必須考慮最後三個記錄。

首先,您應該將別名放入兩個子查詢中。

然後,對於第二個別名,您可以選擇雙重封裝它,以利用升序。

SELECT * FROM (
    SELECT * 
    FROM tbl_product 
    ORDER BY pd_price ASC 
    LIMIT 2 
) tbl1 

UNION ALL 

SELECT * FROM (
    SELECT * FROM (
     SELECT * 
     FROM tbl_product 
     ORDER BY pd_price DESC 
     LIMIT 3 
    ) tbl_a 
    ORDER BY pd_price ASC 
) tbl2 
0

可以使用存儲過程或mysqli_multi_query

CREATE TEMPORARY TABLE IF NOT EXISTS `tmp_table` ENGINE=MEMORY SELECT `field` FROM `tbl` ORDER BY `id` ASC LIMIT 2; 
INSERT INTO tmp_table SELECT `field` FROM `tbl` ORDER BY `id` DESC LIMIT 3; 
SELECT field FROM tmp_table; 

附:完成對不起,我的英語:)

1

在這裏,前2和最後3取決於您的要求,因爲它沒有提到最低的產品。你是否認爲前兩名是最高價格的產品,最後三位是最低價格或反之亦然。我假設case1。

select * 
     from (
      SELECT * 
       FROM `tbl_product` 
       order by pd_price desc limit 2 
     ) as t1 

union all 

select * 
    from (
     SELECT * 
      FROM `tbl_product` 
      order by pd_price asc limit 3 
    ) as t2 
+0

我已經試過此查詢結構也(完全相同),給了我一個錯誤 「UNION ALL的不正確使用和ORDER BY」。 :D –

+0

沒什麼不同,試着去執行它。當你不把它們放到別名中時,你會得到這個錯誤,而我卻這麼做了。 –

+0

您保存了我的工作:D –